LINQ to XML详细描述
创始人
2024-06-06 22:50:58
0

在向大家详细介绍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. 输出结果:   
  14.  Xml version="1.0" encoding="utf-8"?>   
  15.    
  16. Ice Lee   
  17.  Type="Home">010-876546   
  18.  Type="Work">425-23456   
  19.    
  20. ZhiXinCun   
  21. Beijing   
  22.    
  23.   

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. {   
  3. private string tag;   
  4. public string Tag { get { return tag; } set { tag = value; } }   
  5. public MyAnnotation(string tag)   
  6. {   
  7. this.tag = tag;   
  8. }   
  9. }   
  10. … …   
  11. MyAnnotation ma = new MyAnnotation("T1");   
  12. XElement root = new XElement("Root", "content");   
  13. root.AddAnnotation(ma);   
  14. MyAnnotation ma2 = (MyAnnotation)root.Annotation();  

【编辑推荐】

  1. LINQ查询操作剖析
  2. LINQ生成字符串概述
  3. LINQ查询语法简单描述
  4. LINQ解决方案简单概述
  5. LINQ查询结果分析

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...