LINQ to XML 类概述
XAttribute 类
XAttribute 表示一个 XML 属性。
XCData 类
XCData 表示一个 CDATA 文本节点。
XComment 类
XComment 表示一个 XML 注释。
XContainer 类
XContainer 是适用于可能具有子节点的所有节点的抽象基类。 下面的类派生自 XContainer 类:
-
XElement
-
XDocument
XDeclaration 类
XDeclaration 表示一个 XML 声明。 XML 声明用于声明 XML 版本和文档的编码。 此外,XML 声明还指定 XML 文档是否为独立文档。
XDocument 类
XDocument 表示一个 XML 文档。
XDocumentType 类
XDocumentType 表示一个 XML 文档类型定义 (DTD)。
XElement 类
XElement 表示一个 XML 元素。 有关详细信息和示例,
XName 类
XName 表示元素 (XElement) 和属性 (XAttribute) 的名称。 有关详细信息和示例,
LINQ to XML 旨在使 XML 名称尽可能简单。 XML 名称由于复杂而通常被视为 XML 中的高级主题。 有证据证明,这种复杂性不是由开发人员编程时通常使用的命名空间造成的,而是由命名空间前缀造成的。 使用命名空间前缀可以减少输入 XML 时需要的击键数或使 XML 更具可读性。 但前缀通常只是使用完整 XML 命名空间的快捷方式,在多数情况下并不需要。LINQ to XML 通过将所有前缀解析为其对应的 XML 命名空间来简化 XML 名称。 如果需要,可以通过 GetPrefixOfNamespace 方法可以使用前缀。
如果有必要,可以控制命名空间前缀。 在某些情况下,如果使用的是其他 XML 系统(如 XSLT 或 XAML),则需要控制命名空间前缀。 例如,如果 XPath 表达式使用 XSLT 样式表中嵌入的命名空间前缀,则将需要确保使用与 XPath 表达式中使用的前缀相匹配的命名空间前缀来序列化 XML 文档。
XNamespace 类
XNamespace 表示 XElement 或 XAttribute 的命名空间。 命名空间是 XName 的一个组件。
XNode 类
XNode 是一个抽象类,它表示 XML 树的节点。 下面的类派生自 XNode 类:
-
XText
-
XContainer
-
XComment
-
XProcessingInstruction
-
XDocumentType
XNodeDocumentOrderComparer 类
XNodeDocumentOrderComparer 提供用于比较节点的文档顺序的功能。
XNodeEqualityComparer 类
XNodeEqualityComparer 提供用于比较节点的值是否相等的功能。
XObject 类
XObject 是 XNode 和 XAttribute 的抽象基类。 它提供批注和事件功能。
XObjectChange 类
XObjectChange 指定对 XObject 引发事件时的事件类型。
XObjectChangeEventArgs 类
XObjectChangeEventArgs 为 Changing 和 Changed 事件提供数据。
XProcessingInstruction 类
XProcessingInstruction 表示一个 XML 处理指令。 处理指令将信息传递给处理 XML 的应用程序。
XText 类
XText 表示一个文本节点。 多数情况下都不必使用此类。 此类主要用于混合内容。
XDocument 类概述
XDocument 类包含有效的 XML 文档所需的信息。 其中包括 XML 声明、处理指令和注释。
请注意,如果需要 XDocument 类提供的特定功能,您只需创建 XDocument 对象。 在很多情况下,可以直接使用 XElement。 直接使用 XElement 是一种比较简单的编程模型。
XDocument 是从 XContainer 派生的。 因此,它可以包含子节点。 但是,XDocument 对象只能有一个子 XElement 节点。 这反映了 XML 标准,即在 XML 文档中只能有一个根元素。
在没有 Xdocument 的情况下使用 XElement
如上所述,XElement 类是 LINQ to XML 编程接口中的主类。 在很多情况下,您的应用程序不需要您创建文档。 通过使用 XElement 类,可以创建 XML 树,向它添加其他 XML 树,修改 XML 树并进行保存。
若要构造一个 XDocument,可使用函数构造,正如您构造 XElement 对象那样。
下面的代码创建一个 XDocument 对象及其关联的包含对象。
XDocument d = new XDocument( new XComment("This is a comment."), new XProcessingInstruction("xml-stylesheet", "href='mystyle.css' title='Compact' type='text/css'"), new XElement("Pubs", new XElement("Book", new XElement("Title", "Artifacts of Roman Civilization"), new XElement("Author", "Moreno, Jordao") ), new XElement("Book", new XElement("Title", "Midieval Tools and Implements"), new XElement("Author", "Gazit, Inbar") ) ), new XComment("This is another comment.") ); d.Declaration = new XDeclaration("1.0", "utf-8", "true"); Console.WriteLine(d); d.Save("test.xml");
当您检查文件 test.xml 时, 会得到以下输出:
<?xml version="1.0" encoding="utf-8"?> <!--This is a comment.--> <?xml-stylesheet href='mystyle.css' title='Compact' type='text/css'?> <Pubs> <Book> <Title>Artifacts of Roman Civilization</Title> <Author>Moreno, Jordao</Author> </Book> <Book> <Title>Midieval Tools and Implements</Title> <Author>Gazit, Inbar</Author> </Book> </Pubs> <!--This is another comment.-->
XElement 类概述
XElement 类是 LINQ to XML 中的基础类之一。 它表示一个 XML 元素。 可以使用该类创建元素;更改元素内容;添加、更改或删除子元素;向元素中添加属性;或以文本格式序列化元素内容。 还可以与 System.Xml 中的其他类(例如 XmlReader、XmlWriter 和 XslCompiledTransform)进行互操作.
XElement 类提供的功能。
构造 XML 树
可以使用各种方式构造 XML 树,包括以下方式:
-
可以在代码中构造 XML 树。
-
可以从包括 TextReader、文本文件或 Web 地址 (URL) 在内的各种源解析 XML。
-
可以使用 XmlReader 来填充树。 有关更多信息,请参见 ReadFrom。
-
如果您有一个可以将内容写入 XmlWriter 的模块,则可以使用 CreateWriter 方法来创建编写器,将该编写器传递到该模块,然后使用写入 XmlWriter 的内容来填充 XML 树。
但是,创建 XML 树的最常见的方法如下:
XElement contacts = new XElement("Contacts", new XElement("Contact", new XElement("Name", "Patrick Hines"), new XElement("Phone", "206-555-0144"), new XElement("Address", new XElement("Street1", "123 Main St"), new XElement("City", "Mercer Island"), new XElement("State", "WA"), new XElement("Postal", "68042") ) ) );
另一个创建 XML 树的十分常用的方法是使用 LINQ 查询的结果来填充 XML 树,如下面的示例所示:
XElement srcTree = new XElement("Root", new XElement("Element", 1), new XElement("Element", 2), new XElement("Element", 3), new XElement("Element", 4), new XElement("Element", 5) ); XElement xmlTree = new XElement("Root", new XElement("Child", 1), new XElement("Child", 2), from el in srcTree.Elements() where (int)el > 2 select el ); Console.WriteLine(xmlTree);此示例产生以下输出:
<Root> <Child>1</Child> <Child>2</Child> <Element>3</Element> <Element>4</Element> <Element>5</Element> </Root>