LINQ to XML是一种启用了LINQ的内存XML编程接口。使用LINQ to XML可以在.NET Framework编程语言中处理XML结构的数据。LINQ to XML可以将XML文档保存在内存中,并对内存中的XML文档进行查询、修改操作,以及将内存中的XML文档另存为XML文件。LINQ to XML与传统的DOM的最大不同之处在于:LINQ to XML提供了一种新的轻量级的对象模型。
正是因为LINQ to XML集成了LINQ,才使得LINQ to XML查询、检索、操作XML文档变得更加简单。LINQ to XML查询XML文档的查询表达式与XPath在语法上不相同,但是,它们提供相似的功能。下面的实例代码使用LINQ演示了查询Book.xml文件中的根节点“Books”的方法。
XDocument doc = ///…省略了初始化代码
///查询根元素
IEnumerable<XElement> elements = from e in doc.Elements("Books")
select e;
使用LINQ to XML可以对XML文档(或片段)实现以下功能或操作:
q 从文件或流加载XML文档,即读取XML文档的内容。
q 将XML文件序列化为文件或流,即XML文档的序列化操作。
q 使用函数构造更加简单、方便地从头开始创建一个新的XML文档。
q 使用LINQ更加简单、方便地查询XML文档。
q 添加、修改和删除XML文档中的元素、属性等信息。
q 使用XSD验证XML文档。
1.LINQ to XML基础类
LINQ to XML提供了多个支持查询和操作XML文档的基础类,具体说明如下。
q XElement类,表示XML文件中的元素。
q XAttribute类,表示XML文件中的元素的属性(名称/值对)。
q XDocument类,表示一个XML文档。
q XDeclaration类,表示XML文件中XML声明。
q XComment类,表示XML文件中一个XML注释,一般使用“<!-- 注释的内容 -->”格式表示。
q XNamespace类,表示XML文件中的一个XML命名空间。
q XDocumentType类,表示XML文件的文档类型定义(DTD)。
q XName类,表示XML元素或属性的名称。
q XCData类,表示包含CDATA的文本节点。
q XNode类,表示XML文件中的一个节点,可以为元素、注释、文本、XML处理指令等。
q XText类,表示一个文本节点。
q XContainer类,表示可以包含子节点的节点,即充当一个节点“容器”。
q XProcessingInstruction类,表示XML处理指令。
q XObject类,表示XML文件中的节点或属性。
q XObjectChange枚举,指定XObject对象引发的事件的事件类型。
q XObjectChangeEventArgs类,为XObject对象引发的事件提供相关数据。
q XNodeEqualityComparer类,用来比较两个节点是否相等。
q XNodeDocumentOrderComparer类,提供用于比较节点的文档顺序
2.使用函数构造方法创建XML
LINQ to XML提供了一种被称为“函数构造”的方式来创建XML元素(或文档或属性等)。其中,函数构造是指在单个语句中创建XML元素(或文档或属性等)的能力。LINQ to XML中的XElement函数构造具有以下2个特点:
q XElement函数的参数的数据类型为Object的params数组。因此,该函数可以使用任意数量的对象(参数的值)。
q XElement构造函数可以使用采用多种类型的参数。
下面的实例代码使用LINQ to XML调用XDocument函数构造了一个XML文档,并在该文档中添加了XML声明、根元素Books、一级子元素Book及其ID属性、二级子元素(NO、Name、Price和Remark)等内容。
XDocument doc = new XDocument(
new XDeclaration("1.0","utf-8","yes"),
new XElement("Books",
new XElement("Book",
new XAttribute("ID","104"), ///添加属性ID
new XElement("No","0004"), ///添加元素No
new XElement("Name","Book 0004"), ///添加元素Name
new XElement("Price","300"), ///添加元素Price
new XElement("Remark","This is a book 0004.") ///添加元素Remark
)
)
);