本文介绍使用 Visual Basic 2005 或 Visual Basic .NET 中的类导航 XML
XPathNavigator
的一些示例步骤和示例代码。
原始产品版本:
Visual Basic 2005、Visual Basic .NET
原始 KB 编号:
301111
此分步文章演示如何使用从
XPathDocument
对象创建的对象导航可扩展标记语言 (XML) 文档
XPathNavigator
。 此示例使用 XML 数据加载
XPathDocument
对象,在数据上创建
XPathNavigator
对象作为视图,并通过浏览文档来显示 XML。
有关本文的 Microsoft Visual C# 版本,请参阅
使用 Visual C# 使用 XPathNavigator 类导航 XML 文档
。
以下列表概述了所需的推荐硬件、软件、网络基础结构和服务包:
Windows Server 2003、Windows 2000 Professional、Windows 2000 Server、Windows 2000 高级服务器或 Windows NT 4.0 服务器
Visual Studio 2005 或 Visual Studio .NET
本文假定你熟悉以下主题:
XML 术语
创建和读取 XML 文件
XML 路径语言 (XPath) 语法
使用 XPathNavigator 类导航 XML
在 Visual Studio 2005 或 Visual Studio 中。 NET,创建 Visual Basic 2005 或 Visual Basic .NET 控制台应用程序。
此示例使用名为
Books.xml
的文件。 可以创建自己的
Books.xml
文件,也可以使用 .NET 软件开发工具包 (SDK) 快速入门中包含的示例。 如果安装了快速入门,Books.xml位于文件夹中:
\Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VB
或者,可以通过访问:
示例 XML 文件 (books.xml)
来获取此文件
必须将
Books.xml
复制到
\Bin\Debug
创建此项目的文件夹下的文件夹。
确保项目引用
System.Xml
命名空间。
Imports
在命名空间和
XPath
命名空间上
Xml
使用该语句,这样你就不需要在代码后面的这些命名空间中限定声明。 必须在任何其他声明之前使用该
Imports
语句。
Imports System.Xml
Imports System.Xml.XPath
声明相应的变量。 声明要 XPathDocument
保存 XML 文档的对象和 XPathNavigator
用于评估 XPath 表达式并移动到文档的对象。 声明一个字符串对象来保存 XPath 表达式。 在 Module1 的 Main 过程中添加声明代码。
Dim nav As XPathNavigator
Dim docNav As XPathDocument
加载包含 XPathDocument
示例文件 Books.xml
的对象。 该 XPathDocument
类使用可扩展样式表语言转换 (XSLT) 为 XML 文档处理提供快速且面向性能的缓存。 它类似于 XML 文档对象模型 (DOM) 但高度优化了 XSLT 处理和 XPath 数据模型。
'Open the XML.
docNav = New XPathDocument("books.xml")
XPathNavigator
从文档创建对象。 XPathNavigator
使你可以在 XML 文档中同时移动属性节点和命名空间节点。
'Create a navigator to query with XPath.
nav = docNav.CreateNavigator
使用该方法移动到文档的 MoveToRoot
根目录。 MoveToRoot
将导航器设置为包含整个节点树的文档节点。
'Initial XPathNavigator to start at the root.
nav.MoveToRoot()
使用该 MoveToFirstChild
方法移动到 XML 文档的子级。 该 MoveToFirstChild
方法移动到当前节点的第一个子节点。 在源中 Books.xml
,你将从根文档移到子文档、 Comment
节和书店节点。
'Move to the first child node (comment field).
nav.MoveToFirstChild()
使用该 MoveToNext
方法循环访问同级节点。 该 MoveToNext
方法移动到当前节点的下一个同级。
'Loop through all the root nodes.
Loop While nav.MoveToNext
使用该 NodeType
属性可确保仅处理元素节点,并使用该 Value
属性显示元素的文本表示形式。
'Find the first element.
If nav.NodeType = XPathNodeType.Element Then
'If children exist.
If nav.HasChildren Then
'Move to the first child.
nav.MoveToFirstChild()'Loop through all the children.
'Display the data.
Console.Write("The XML string for this child ")
Console.WriteLine("is '{0}'", nav.Value)
Loop While nav.MoveToNext
End If
End If
Loop While nav.MoveToNext
使用该 HasAttributes
属性确定节点是否具有任何属性。 还可以使用其他方法(例如 MoveToNextAttribute
)移动到属性并检查其值。
此代码段仅遍历根节点的后代,而不遍历整个树。
'Find the first element.
If nav.NodeType = XPathNodeType.Element Then
'if children exist
If nav.HasChildren Then
'Move to the first child.
nav.MoveToFirstChild()'Loop through all the children.
'Display the data.
Console.Write("The XML string for this child ")
Console.WriteLine("is '{0}'", nav.Value)'Check for attributes.
If nav.HasAttributes Then
Console.WriteLine("This node has attributes")
End If
Loop While nav.MoveToNext
End If
End If
Loop While nav.MoveToNext
ReadLine
使用对象的方法Console
在控制台显示的末尾添加暂停,以便更轻松地显示上述结果。
'Pause.
Console.ReadLine()
生成并运行控制台应用程序项目。
完整代码列表
Imports System.Xml
Imports System.Xml.XPath
Module Module1
Sub Main()
Dim nav As XPathNavigator
Dim docNav As XPathDocument
docNav = New XPathDocument("books.xml")
nav = docNav.CreateNavigator
nav.MoveToRoot()'Move to the first child node (comment field).
nav.MoveToFirstChild()
'Find the first element.
If nav.NodeType = XPathNodeType.Element Then
'if children exist
If nav.HasChildren Then
'Move to the first child.
nav.MoveToFirstChild()'Loop through all the children.
'Display the data.
Console.Write("The XML string for this child ")
Console.WriteLine("is '{0}'", nav.Value)'Check for attributes.
If nav.HasAttributes Then
Console.WriteLine("This node has attributes")
End If
Loop While nav.MoveToNext
End If
End If
Loop While nav.MoveToNext
'Pause.
Console.ReadLine()
End Sub
End Module
XML 扩展数据类型
XPathNavigator 类定义)
XPathDocument 类
XslTransform 类
hXPath 示例
版本 1.0:W3C 建议 1999 年 11 月 16 日