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。

  • 使用 AddRemoveReplaceWithSetValue 等方法对内存 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 以及其使用方式。

 

posted on 2008-04-07 02:06  Q.Lee.lulu  阅读(1654)  评论(0编辑  收藏  举报