LINQtoXML详细描述

在向大家详细介绍LINQ to XML之前,首先让大家了解下LINQ to Object,然后全面介绍LINQ to XML。

LINQ to Object

 
 
 
  1. MethodInfo[] methods = typeof(string).GetMethods(); 
  2. var q = from t in methods 
  3. where (t.Name.Length > 15) 
  4. select t; 

LINQ to Object主要是基于.NET框架里的Lambda表达式来实现的,因此上面的代码运行结果等同于下面的代码:

 
 
 
  1. MethodInfo[] methods = typeof(string).GetMethods(); 
  2. var q = methods 
  3. .Where((method) => method.Name.Length > 15) 
  4. .Select((name) => name.Name); 

LINQ to XML

 
 
 
  1. XElement xelem = XElement.Load(@"example.xml"); 
  2. // 查询节点名为Item,并返回它们的PartNumber属性值的集合 
  3. IEnumerable partNos = from item in xelem.Descendants("Item") 
  4. Select (string)item.Attribute("PartNumber"); 
  5. foreach (string str in partNos) 
  6. Console.WriteLine(str); 

在.NET3.5中,框架对XML的操作进行了扩展,这个扩展就是LINQ to XML。在名称空间System.Xml.LINQ下。从以上的代码我们可以看到增加了一个新的XElement对象。我们通过XElement.Load方法来装载XML文档,而不是传统的DOM模式XmlDocument.Load。

相比较于W3C的DOM文档结构来说,LINQ to XML为我们提供了一种更方便的创建一个XML文档的方式

 
 
 
  1. XElement contacts = 
  2. new XElement("Contacts", 
  3. new XElement("Name", "Ice Lee"), 
  4. new XElement("Phone", "010-876546", 
  5. new XAttribute("Type", "Home")), 
  6. new XElement("Phone", "425-23456", 
  7. new XAttribute("Type", "Work")), 
  8. new XElement("Address", 
  9. new XElement("Street", "ZhiXinCun"), 
  10. new XElement("City", "Beijin") 
  11. ); 
  12. 输出结果: 
  13.  Xml version="1.0" encoding="utf-8"?> 
  14.  
  15. Ice Lee 
  16.  Type="Home">010-876546 
  17.  Type="Work">425-23456 
  18.  
  19. ZhiXinCun 
  20. Beijing 
  21.  
  22.  

LINQ to XML提供了为丰富并且简洁的类来实现对XML的操作。相对于种类繁多的DOM模型的XML类库而言,LINQ的类使我们的学习曲线变得平滑并且还能达到相同的效果。LINQ to XML解决了DOM模型中的几个比较不方便的问题,如修改节点名字的问题;同时也抛弃了一些看起来很强大但是很不常用的东西,如实体和实体引用。这样使得LINQ to XML的操作速度更快并且更方便。以下的几个例子将展示给大家LINQ to XML如何完成节点名称修改,增加和删除的效果。

首先,我们看一下添加一个节点到XML中是这么样实现的:

   
   
   
  1. XElement xelem = XElement.Load(@"example.xml"); 
  2. XElement newnewXelem = new XElement("NewNode", "This is new node"); 
  3. xelem.Add(newXelem); 

相当的简单,只要先生成一个XElement对象然后把它Add到当前节点对象就可以了。进一步我们仔细查看一下XElement可以添加节点的方法。可以看到一共有Add, AddAfterSelf, AddAnnotation, AddBeforeSelf, AddFirst这五个方法。在默认情况下,Add的操作是将新节点作为被插入节点的***一个孩子节点插入的,而AddFirst正好相反。AddAfterSelf和AddBeforeSelf则是将节点作为兄弟节点插入的,这里要注意的是调用这两个方法的时候不能以根节点作为被插入节点,因为XML文档规定只能有一个根节点。***,我们来看一下AddAnnotation这个方法。

AddAnnotation是为一个节点添加一个相关的评注的类对象。这个类对象可以用户自己定义,所以通过这个方法我们可以扩展XML文档对象的功能,例如根据节点来获取类对象的功能。下面是一段引用自msdn的代码:

   
   
   
  1. public class MyAnnotation 
  2. private string tag; 
  3. public string Tag { get { return tag; } set { tag = value; } } 
  4. public MyAnnotation(string tag) 
  5. this.tag = tag; 
  6. … … 
  7. MyAnnotation ma = new MyAnnotation("T1"); 
  8. XElement root = new XElement("Root", "content"); 
  9. root.AddAnnotation(ma); 
  10. MyAnnotation ma2 = (MyAnnotation)root.Annotation(); 

网站题目:LINQtoXML详细描述
标题来源:http://www.shufengxianlan.com/qtweb/news8/365858.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联