快速上手LINQ to XML
在我们的程序中,我们经常需要将一些系统的数据、信息保存在文件中,而不是保存在数据库中,在.NET中,我通常都是选择将这些系统的数据、信息保存在XML中。
操作XML的技术有很多种:
1)DOM(Document Object Model,文档对象模型),它为XML文档提供了一个标准的解析。
2)XPath和XSLT,它们提供了查询和格式化XML的功能。
3).NET框架中提供了一些对XML操作的类(在System.XML命名空间下)。
4)LINQ to XML。
在我看来有了LINQ to XML技术,.NET中其它操纵XML的技术都可以弃而不用了,因为LINQ to XML操纵XML比其它技术都更简单更方便也更直观。
LINQ to XML 是基于LINQ的,所以可以使用LINQ的所有功能,如标准查询操作符(详细可阅读《LINQ标准查询操作符详解》)和LINQ的编程接口。使用LINQ to XML可以很方便地将XML文件加载到内存中,对XML文档中的节点进行查询修改删除等各种操作,然后又可以很方便地将操作后的XML文档保存回磁盘。
System.Xml.Linq的命名空间中包含了LINQ to XML处理XML用到的所有类,共有19个类,如下所示。
类 说明
包含 LINQ to XML 扩展方法。
表示一个 XML 特性。
表示一个包含 CDATA 的文本节点。
表示一个 XML 注释。
表示可包含其他节点的节点。
表示一个 XML 声明。
表示 XML 文档。
表示 XML 文档类型定义 (DTD)。
表示一个 XML 元素。
表示 XML 元素或特性的名称。
表示一个 XML 命名空间。此类不能被继承。
表示 XML 树中节点的抽象概念(元素、注释、文档类型、处理指令或文本节点)。
包含用于比较节点的文档顺序的功能。无法继承此类。
比较节点以确定其是否相等。无法继承此类。
表示 XML 树中的节点或特性。
提供有关 Changing和 Changed事件的数据。表示 XML 处理指令。
表示支持延迟流输出的 XML 树中的元素。
表示一个文本节点。
这19个类提供了很多很多的方法,事实上很少人会在学习LINQ to XML的时候去学习每一种的方法的细节,本文的目的是让从来没有使用过LINQ to XML的童鞋在需要使用LINQ to XML技术的时候快速上手,然后用之于自己的程序开发中,所以本文只讲LINQ to XML处理XML类中最常用、用到最多的三个类,分别是XDocument、XElement和XAttribute。
XDocument类派生于XContainer类,因此它可以有子节点,但XML的标准限制了XDocument对象只包含单个XElement子节点,因为XML文档只允许有一个根节点。
XDocument提供了处理有效XML文档,包括声明、注释和处理指令。
XDocument 可以包含以下元素:
1)一个 XDeclaration 对象。 XDeclaration 使您能够指定 XML 声明的相关部分:XML 版本、文档的编码以及 XML 文档是否是独立的。
2)一个 XElement 对象。 这是 XML 文档的根节点。
3)任意数目的 XProcessingInstruction 对象。 处理指令将信息传递给处理 XML 的应用程序。
4)任意数目的 XComment 对象。 注释将与根元素同级。 XComment 对象不能是列表中的第一个参数,因为 XML 文档以注释开头无效。