目录
写在前面
在很多情况下,都可以见到使用xml的影子。例如,在 Web 上,在配置文件、Microsoft Office Word 文件(将word文档另存为xml文件,这也提供了一种通过操作xml,操作word的一种方式)以及数据库中,都可以看到 XML。而linq to xml提供了一种操作xml更便捷的方式。
系列文章
linq to xml
什么是linq to xml?
LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework 编程语言中处理 XML。
LINQ to XML 将 XML 文档置于内存中,这一点很像文档对象模型 (DOM)。 您可以查询和修改 XML 文档,修改之后,可以将其另存为文件,也可以将其序列化然后通过 Internet 发送。 但是,LINQ to XML 与 DOM 不同:它提供一种新的对象模型,这是一种更轻量的模型,使用也更方便,这种模型利用了 Visual C# 2008 在语言方面的改进。
LINQ to XML 最重要的优势是它与 语言集成查询 (LINQ) 的集成。 由于实现了这一集成,因此,可以对内存 XML 文档编写查询,以检索元素和属性的集合。 LINQ to XML 的查询功能在功能上(尽管不是在语法上)与 XPath 和 XQuery 具有可比性。 Visual C# 2008 集成 LINQ 后,可提供更强的类型化功能、编译时检查和改进的调试器支持。
LINQ to XML 的另一个优势是通过将查询结果用作 XElement 和 XAttribute 对象构造函数的参数,实现了一种功能强大的创建 XML 树的方法。 这种方法称为“函数构造”,利用这种方法,开发人员可以方便地将 XML 树从一种形状转换为另一种形状。
使用 LINQ to XML,您可以:
•从文件或流加载 XML。
•将 XML 序列化为文件或流。
•使用函数构造从头开始创建 XML。
•使用类似 XPath 的轴查询 XML。
•使用 Add、Remove、ReplaceWith 和 SetValue 等方法对内存 XML 树进行操作。
•使用 XSD 验证 XML 树。
•使用这些功能的组合,可将 XML 树从一种形状转换为另一种形状。
创建xml树
使用 LINQ to XML 编程的一个明显优势是易于创建 XML 树。(需要用到linq to xml的时候,需要引入命名空间:using System.Xml.Linq;)。
创建xml树,需要用类XElement
第一个参数:节点名称
第二个参数:节点内容
下面看一个例子:
1 using System.Xml.Linq; 2 namespace Wolfy.LinqToXMLDemo 3 { 4 class Progra 5 { 6 static void Main(string[] args) 7 { 8 XElement persons = new XElement("Persons", 9 new XElement("Person", 10 new XElement("ID", "1"), 11 new XElement("Name", "Wolfy"), 12 new XElement("Address", "北京昌平区")), 13 new XElement("Person", 14 new XElement("ID", "2"), 15 new XElement("Name", "zhangsan"), 16 new XElement("Address", "北京海淀区"))); 17 //保存在文件中 18 persons.Save("1.xml"); 19 Console.WriteLine(persons.ToString()); 20 Console.Read(); 21 } 22 } 23 }
输出
和使用XmlDocument创建xml文档(关于xml普通创建方式这里不再做介绍,毕竟不是本文的重点,如有必要可在后面的文章中介绍。),确实方便了很多,通过XElement类创建xml树,通过层级关系缩进,非常清楚节点的层级关系。说句心里话,有简单的方式,谁不想偷偷懒啊。
增
那么我现在在Persons节点上,添加一个节点,并设置name的属性age。
1 persons.Add( 2 new XElement("Person", 3 new XElement("ID", "3"), 4 new XElement("Name", 5 new XAttribute("age","20"), 6 new XText("lisi") 7 ), 8 new XElement("Address", "上海")));
输出
删
1 //删除id为2的节点,使用linq查找到id为2的节点 2 IEnumerable<XElement> nodes = from p in persons.Elements("Person") 3 where p.Element("ID").Value== "2" 4 select p; 5 XElement node = nodes.SingleOrDefault(); 6 if (node!=null) 7 { 8 //移除 9 node.Remove(); 10 }
输出
改
为id为1的Person的name节点添加age属性,并修改名字为wanger。
1 //查找节点id为1的节点 2 IEnumerable<XElement> nodes = from p in persons.Elements("Person") 3 where p.Element("ID").Value == "1" 4 select p; 5 XElement node = nodes.SingleOrDefault(); 6 if (node != null) 7 { 8 //添加属性,修改节点内容 9 node.Element("Name").SetAttributeValue("age", "11"); 10 node.Element("Name").Value="wanger"; 11 }
输出
查
关于使用linq 查询 xml的例子这里都不再赘述了,上面的例子中,修改和删除都有涉及。
总结
本文主要介绍了,在linq to xml中几种常见的操作,当然方法很多,只是简单的熟悉语法。通过上面的例子,你也肯定对linq to xml的方式操作xml有了更进一步的认识。
参考文章
https://msdn.microsoft.com/zh-cn/library/bb387098.aspx