Visual Basic 中的 LINQ to XML 概述

Visual Basic 通过 XML 文本和 XML 轴属性提供对 LINQ to XML 的支持。 这样,你便能够使用熟悉的便捷语法在 Visual Basic 代码中使用 XML。 XML 文本让你可以直接在代码中包括 XML。 XML 轴属性让你可以访问 XML 文本的子节点、子代节点和属性。 有关详细信息,请参阅 XML 文本概述在 Visual Basic 中访问 XML

LINQ to XML 是一种内存中的 XML 编程 API,旨在利用语言集成查询查询 (LINQ)。 尽管可以直接调用 LINQ API,但只有 Visual Basic 能够声明 XML 文本并直接访问 XML 轴属性。

注意

XML 文本和 XML 轴属性在 ASP.NET 页中的声明性代码中不受支持。 若要使用 Visual Basic XML 功能,请将代码放在 ASP.NET 应用程序的代码隐藏页中。

Play button 有关相关的视频演示,请参阅如何开始使用 LINQ to XML?如何使用 LINQ to XML 创建 Excel 电子表格?

创建 XML

有两种方法可以在 Visual Basic 中创建 XML 树。 可以直接在代码中声明 XML 文本,也可以使用 LINQ API 创建树。 这两个过程都可以让代码反映 XML 树的最终结构。 例如,下面的代码示例将创建 XML 元素:

Dim contact1 As XElement = 
    <contact>
      <name>Patrick Hines</name>
      <phone type="home">206-555-0144</phone>
      <phone type="work">425-555-0145</phone>
    </contact>

有关详细信息,请参阅在 Visual Basic 中创建 XML

访问和导航 XML

Visual Basic 提供了 XML 轴属性来访问和导航 XML 结构。 这些属性允许通过指定 XML 子元素名称来访问 XML 元素和属性。 或者,可以显式调用 LINQ 方法来导航和定位元素和属性。 例如,下面的代码示例使用 XML 轴属性来引用 XML 元素的属性和子元素。 该代码示例使用 LINQ 查询来检索子元素,并将其输出为 XML 元素,从而有效地执行转换。

' Place Imports statements at the top of your program.
Imports <xmlns:ns="http://SomeNamespace">

Module Sample1

    Sub SampleTransform()

        ' Create test by using a global XML namespace prefix.

        Dim contact =
            <ns:contact>
                <ns:name>Patrick Hines</ns:name>
                <ns:phone ns:type="home">206-555-0144</ns:phone>
                <ns:phone ns:type="work">425-555-0145</ns:phone>
            </ns:contact>

        Dim phoneTypes =
          <phoneTypes>
              <%= From phone In contact.<ns:phone>
                  Select <type><%= phone.@ns:type %></type>
              %>
          </phoneTypes>

        Console.WriteLine(phoneTypes)
    End Sub

End Module

有关详细信息,请参阅在 Visual Basic 中评估 XML

XML 命名空间

Visual Basic 允许使用 Imports 语句为全局 XML 命名空间指定别名。 以下示例演示了如何使用 Imports 语句导入 XML 命名空间:

Imports <xmlns:ns="http://someNamespace">

在访问 XML 轴属性并为 XML 文档和元素声明 XML 文本时,可以使用 XML 命名空间别名。

可以使用 GetXmlNamespace 运算符来检索 XNamespace 对象中是否有特定命名空间前缀。

有关详细信息,请参阅 Imports 语句(XML 命名空间)

在 XML 文本中使用 XML 命名空间

以下示例演示了如何创建使用全局命名空间 nsXElement 对象:

Dim contact1 As XElement = 
    <ns:contact>
        <ns:name>Patrick Hines</ns:name>
        <ns:phone type="home">206-555-0144</ns:phone>
        <ns:phone type="work">425-555-0145</ns:phone>
    </ns:contact>

Console.WriteLine(contact1)

Visual Basic 编译器可将包含 XML 命名空间别名的 XML 文本转换为等效代码,该代码使用 XML 表示法以使用具有 xmlns 属性的 XML 命名空间。 编译后,上一部分示例中的代码将生成与以下示例基本相同的可执行代码:

Dim contact2 As XElement = 
    <ns1:contact xmlns:ns1="http://someNamespace">
        <ns1:name>Patrick Hines</ns1:name>
        <ns1:phone type="home">206-555-0144</ns1:phone>
        <ns1:phone type="work">425-555-0145</ns1:phone>
    </ns1:contact>

Console.WriteLine(contact2)

在 XML 轴属性中使用 XML 命名空间

XML 文本中声明的 XML 命名空间不可在 XML 轴属性中使用。 但是,全局命名空间可以与 XML 轴属性一起使用。 使用冒号将 XML 命名空间前缀与本地元素名称分开。 下面是一个示例:

Console.WriteLine("Contact name is: " & contact1.<ns:name>.Value)

另请参阅