Linq之Linq to XML

目录

写在前面

系列文章 

linq to xml 

总结

写在前面

在很多情况下,都可以见到使用xml的影子。例如,在 Web 上,在配置文件、Microsoft Office Word 文件(将word文档另存为xml文件,这也提供了一种通过操作xml,操作word的一种方式)以及数据库中,都可以看到 XML。而linq to xml提供了一种操作xml更便捷的方式。

系列文章

Linq之Lambda表达式初步认识

Linq之Lambda进阶

Linq之隐式类型、自动属性、初始化器、匿名类

Linq之扩展方法

Linq之Expression初见

Linq之Expression进阶

Linq之Expression高级篇(常用表达式类型)

Linq之常见关键字

Linq之延迟加载特性

Linq之Linq to Objects

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

posted @ 2015-02-06 21:25  wolfy  阅读(3053)  评论(0编辑  收藏  举报