Visual Basic 中的 LINQ to XML 概述

更新:2007 年 11 月

Visual Basic 通过 XML 文本和 XML 轴属性提供对 LINQ to XML 的支持。这使您可以使用熟悉且方便的语法在 Visual Basic 代码中处理 XML。使用 XML 文本可以直接在代码中包含 XML。使用 XML 轴属性 (Property) 可以访问 XML 文本的子节点、子代节点和属性 (Attribute)。有关更多信息,请参见 XML 文本概述在 Visual Basic 中访问 XML

LINQ to XML 是专为利用语言集成查询 (LINQ) 而设计的内存中 XML 编程 API。虽然可以直接调用 LINQ API,但只有使用 Visual Basic 才能声明 XML 文本和直接访问 XML 轴属性。

说明:

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

创建 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 轴属性。这些属性 (Property) 使您可以通过指定 XML 子元素名称来访问 XML 元素和属性 (Attribute)。或者,您还可以通过显式调用 LINQ 方法来导航和查找元素与属性。例如,下面的代码示例使用 XML 轴属性 (Property) 来引用 XML 元素的属性 (Attribute) 和子元素。该代码示例使用 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 命名空间

下面的示例演示如何创建一个使用全局命名空间 ns 的 LengthConverter 对象:

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 命名空间的 XML 表示法,并且使用了 xmlns 属性。编译后,上一个部分的示例中的代码将产生与以下示例实质相同的可执行代码。

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)

请参见

其他资源

Visual Basic 中的 XML

在 Visual Basic 中创建 XML

在 Visual Basic 中访问 XML

在 Visual Basic 中操作 XML