Visual Basic 中的 LINQ to XML 概述
Visual Basic 通过 XML 文本和 XML 轴属性提供对 LINQ to XML 的支持。 这使您可以使用熟悉且方便的语法在您的 Visual Basic 代码中使用 XML。您可以通过 XML 文本 直接在您的代码中包含 XML。 使用 XML 轴属性可以访问 XML 文本的子节点、子代节点和特性。 有关更多信息,请参见 XML 文本概述 (Visual Basic)和在 Visual Basic 中访问 XML。
LINQ to XML 是专为利用语言集成查询 (LINQ) 而设计的内存中 XML 编程 API。 虽然可以直接调用 LINQ API,但只有使用 Visual Basic 才能声明 XML 文本和直接访问 XML 轴属性。
备注
ASP.NET 页中的声明性代码不支持 XML 文本和 XML 轴属性。若要使用 Visual Basic XML 功能,请将代码放在 ASP.NET 应用程序的代码隐藏页中。
相关的视频演示,请参见 How Do I Get Started with LINQ to XML?(如何开始使用 LINQ to XML?)和 How Do I Create Excel Spreadsheets using 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 运算符 (Visual Basic)检索特定命名空间前缀的 XNamespace 对象。
有关更多信息,请参见 Imports 语句(XML 命名空间)。
在 XML 文本中使用 XML 命名空间
下例演示如何创建一个使用全局命名空间 ns 的 XElement 对象:
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)