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

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。http://www.cnblogs.com/wolf-sun/p/4278033.html

相关文章
|
XML 开发框架 .NET
XML基础学习02&lt;linq to xml&gt;
XML基础学习02&lt;linq to xml&gt;
150 0
XML基础学习02&lt;linq to xml&gt;
|
XML 存储 开发框架
Linq To XML总结
Linq To XML总结
87 0
Linq To XML总结
|
XML JavaScript .NET
|
XML JavaScript .NET