LINQ to XML 概述

在很多环境中,XML 已广泛采用为格式化数据的方式。 例如,在 Web 上,在配置文件、Microsoft Office Word 文件以及数据库中,都可以看到 XML。

LINQ to XML 经过了重新设计,是最新的 XML 编程方法。 它提供文档对象模型 (DOM) 的内存文档修改功能,支持 LINQ 查询表达式。 尽管这些查询表达式在语法上与 XPath 不同,但它们提供类似的功能。

LINQ to XML 开发人员

LINQ to XML 是面向各种开发人员的。 对于只想完成某项工作的普通开发人员,LINQ to XML 通过提供与 SQL 相似的查询表达式,使 XML 变得更加简单。 只要稍加学习,程序员就能学会以自己选择的编程语言编写简洁、功能强大的查询。

专业开发人员可以使用 LINQ to XML 来大幅提高他们的工作效率。 通过使用 LINQ to XML,他们可以编写出表达能力更强、更为紧凑、功能更强的代码。 他们可以同时对多个数据域使用查询表达式。

什么是 LINQ to XML?

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

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

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

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

例如,您可能有一个典型 XML 采购单(如 示例 XML 文件:典型采购订单 (LINQ to XML) 所述)。 通过使用 LINQ to XML,可以运行以下查询,以获取采购单每个项元素的部件号属性值:

IEnumerable<string> partNos =
    from item in purchaseOrder.Descendants("Item")
    select (string) item.Attribute("PartNumber");

在 Visual Basic 中,该查询的代码如下:

Dim partNos = _
    From item In purchaseOrder...<Item> _
    Select item.@PartNumber

另一个示例,您可能需要一个列表,列出值大于 100 美元的项,并根据部件号排序。 若要获取此信息,可以运行下面的查询:

IEnumerable<XElement> partNos =
    from item in purchaseOrder.Descendants("Item")
    where (int) item.Element("Quantity") *
        (decimal) item.Element("USPrice") > 100
    orderby (string)item.Element("PartNumber")
    select item;

在 Visual Basic 中,该查询的代码如下:

Dim partNos = _
    From item In purchaseOrder...<Item> _
    Where (item.<Quantity>.Value * _
           item.<USPrice>.Value) > 100 _
    Order By item.<PartNumber>.Value _
    Select item

除了这些 LINQ 功能以外,LINQ to XML 提供了改进的 XML 编程接口。 使用 LINQ to XML,您可以:

  • 从文件或流加载 XML。

  • 将 XML 序列化为文件或流。

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

  • 使用类似 XPath 的轴查询 XML。

  • 使用 AddRemoveReplaceWithSetValue 等方法对内存 XML 树进行操作。

  • 使用 XSD 验证 XML 树。

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

创建 XML 树

使用 LINQ to 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")
            )
        )
    );

在 Visual Basic 中,构造 XML 树的代码甚至更简单,因为它使用 XML 文本:

Dim contacts = _
    <Contacts>
        <Contact>
            <Name>Patrick Hines</Name>
            <Phone Type="Home">206-555-0144</Phone>
            <Phone Type="Work">425-555-0145</Phone>
            <Address>
                <Street1>123 Main St</Street1>
                <City>Mercer Island</City>
                <State>WA</State>
                <Postal>68042</Postal>
            </Address>
        </Contact>
    </Contacts>

Visual Basic 编译器将 XML 文本转换为对 LINQ to XML 的方法调用。

有关更多信息,请参见创建 XML 树

请参见

参考

System.Xml.Linq

概念

Visual Basic 中的 LINQ to XML 概述

其他资源

入门 (LINQ to XML)

Visual Basic 中的 XML