ID #8207

Linq To Xml学习 - 1.LINQ to XML 概述

LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework 编程语言中处理 XML。

它将 XML 文档置于内存中,这一点很像文档对象模型 (DOM)。 您可以查询 和修改 XML 文档,修改之后,可以将其另存为文件,也可以将其序列化然后通 过网络发送。 但是,LINQ to XML 与 DOM 不同: 它提供一种新的对象模型, 这是一种更轻量的模型,使用也更方便,这种模型利用了 Visual C# 2008 在语 言方面的改进。

LINQ to XML 最重要的优势是它与 Language-Integrated Query (LINQ) 的 集成。 由于实现了这一集成,因此,可以对内存 XML 文档编写查询,以检索元 素和属性的集合。 LINQ to XML 的查询功能在功能上(尽管不是在语法上)与 XPath 和 XQuery 具有可比性。 Visual C# 2008 集成 LINQ 后,可提供更强的 类型化功能、编译时检查和改进的调试器支持。

通过将查询结果用作 XElement 和 XAttribute 对象构造函数的参数,实现 了一种功能强大的创建 XML 树的方法。 这种方法称为“函数构造” ,利用这种方法,开发人员可以方便地将 XML 树从一种形状转换为另一种形状 。

LINQ to XML 提供了改进的 XML 编程接口,这一点可能与 LINQ to XML 的 LINQ 功能同样重要。 通过 LINQ to XML,对 XML 编程时,您可以实现任何预 期的操作,包括:

从文件或流加载 XML。

将 XML 序列化为文件或流。

使用函数构造从头开始创建 XML。

使用类似 XPath 的轴查询 XML。

使用 Add、Remove、ReplaceWith 和 SetValue 等方法对内存 XML 树进行操 作。

使用 XSD 验证 XML 树。

使用这些功能的组合,可将 XML 树从一种形状转换为另一种形状。

创建 XML 树是否方便,这一点非常重要。 例如,若要创建一个小型 XML 树 ,可以编写以下 C# 代码:

XElement contacts =
  new XElement("Contacts",
    new XElement("Contact",
      new XElement("Name", "Patrick Hines"),
      new XElement("Phone", "206-555- 0144",
        new XAttribute("Type", "Home")),
      new XElement("phone", "425-555- 0145",
        new XAttribute("Type", "Work")),
      new XElement("Address",
        new XElement("Street1", "123 Main St"),
        new XElement("City", "Mercer Island"),
        new XElement("State", "WA"),
        new XElement("Postal", "68042")
      )
    )
  );

请注意,缩进用于构造 XML 树的代码可显示基础 XML 的结构。

直接使用 XML 元素

在使用 XML 编程时,主要关注的通常是 XML 元素,也可能关注属性。 在 LINQ to XML 中,可以直接使用 XML 元素和属性。 例如,可以执行以下操作:

创建 XML 元素而根本不使用文档对象。 当必须使用 XML 树的片段时,这可 简化编程。

直接从 XML 文件加载 T:System.Xml.Linq.XElement 对象。

将 T:System.Xml.Linq.XElement 对象序列化为文件或流。

使用 LINQ to XML 时,仅在文档的根级别添加注释或处理说明时,才需使用 XDocument

名称和命名空间的简化处理

处理名称、命名空间和命名空间前缀通常是 XML 编程的复杂部分。LINQ to XML 完全不需要处理命名空间前缀,从而简化了名称和命名空间。 可以轻松控 制命名空间前缀。 但如果您决定不显式控制命名空间前缀,则在序列化时, LINQ to XML 将会分配命名空间前缀(如果需要)或使用默认命名空间进行序列 化。 如果使用默认命名空间,则生成的文档中将没有命名空间前缀。

LINQ to XML 也不需要用户理解什么是 NameTable 以及其使用方式。


2011-07-02 09:59
阅读:
I'm VC , Just U know Y
本站部分文章来源于互联网,版权归原作者所有。

延伸阅读:

《WCF技术内幕》21:第2部分_第5章_消息:WCF XML

《WCF技术内幕》22:第2部分_第5章_消息:XmlDict

使用LINQ查询非泛型类型

如何在.net 当中XML序列化一个Collection

NDbUnit学习总结