本文介绍使用 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 日

  •