如何通过使用 Visual Basic 与 XPathNavigator 类导航 XML

文章翻译 文章翻译
文章编号: 301111 - 查看本文应用于的产品
本文的发布号曾为 CHS301111
这篇文章,Microsoft Visual C# 版本请参阅 308343.
有关此 Microsoft Visual Basic 6.0 版文章,请参阅 271619.
展开全部 | 关闭全部

本文内容

概要

本文逐步介绍如何导航与XPathDocument对象中创建一个XPathNavigator对象的可扩展标记语言 (XML) 文档。此示例加载 XML 数据的XPathDocument对象、 为到数据视图中创建一个XPathNavigator对象,并通过遍历显示的 XML在文档中。

要求

"下表列出了推荐使用的硬件、 软件、 网络基础结构和所需的服务包:
  • Microsoft Windows Server 2003,Microsoft Windows 2000专业,Windows 2000 Server、 Windows 2000 高级服务器或 MicrosoftWindows NT 4.0 服务器
  • Microsoft Visual Studio 2005年或 Microsoft Visual Studio.NET
这文章假定您熟悉下列主题:
  • XML 术语
  • 创建和读取 XML 文件
  • XML 路径语言 (XPath) 语法

如何使用 XPathNavigator 类导航 XML

  1. Visual Studio 或 Visual Studio 2005年中。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
    或者,您可以通过访问以下 Web 站点获得此文件:
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms762271 (v=vs.85).aspx

    您必须复制到 Books.xml位于创建此文件夹下的 \Bin\Debug 文件夹项目。
  2. 请确保该项目引用的System.Xml命名空间。
  3. 针对XmlXPath的名称空间使用Imports语句,以便您不需要限定声明在以后在代码中的这些命名空间。您必须使用Imports语句在所有其他声明之前。
    Imports System.Xml
    Imports System.Xml.XPath
    					
  4. 声明相应的变量。声明一个XPathDocument对象来保存 XML 文档和XPathNavigator对象来计算 XPath 表达式,通过移动文档。声明一个字符串对象来保存的 XPath 表达式。添加代码中的声明在 Module1 Main过程。
    Dim nav As XPathNavigator
    Dim docNav As XPathDocument
    					
  5. 与 Books.xml 文件示例加载一个XPathDocument对象。XPathDocument类使用可扩展样式表语言转换 (XSLT)若要为 XML 文档处理提供了快速、 注重性能的高速缓存。它类似于 XML 文档对象模型 (DOM) 但高度优化用于处理 XSLT 和 XPath 数据模型。
    'Open the XML.
    docNav = New XPathDocument("books.xml")
    					
  6. 从文档中创建一个XPathNavigator对象。XPathNavigator使您能够在这两个属性节点中移动和XML 文档中的命名空间节点。
    'Create a navigator to query with XPath.
    nav = docNav.CreateNavigator
    					
  7. 使用MoveToRoot方法移动到文档的根。MoveToRoot将导航器设置为包含整个文档节点树节点。
    'Initial XPathNavigator to start at the root.
    nav.MoveToRoot()
    					
  8. 使用MoveToFirstChild方法将移动到的 XML 文档的子级。MoveToFirstChild方法将移动到当前节点的第一个子级。在这种情况Books.xml 源要移离根文档中儿童、 备注部分中和书店节点。
    'Move to the first child node (comment field).
    nav.MoveToFirstChild()
    					
  9. 使用MoveToNext方法来循环访问级别的同级节点。MoveToNext方法将移动到当前节点的下一个同级。
    'Loop through all the root nodes.
    Do
        ...
    Loop While nav.MoveToNext
    					
  10. 使用NodeType属性来确保您仅处理元素节点然后,使用Value属性来显示该元素的文本表示形式。
    Do
        '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.
        Do
    '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
    					
  11. 使用HasAttributes属性确定节点是否具有任何属性。您可以此外可以使用其他方法,如MoveToNextAttribute,将移动到一个属性,以查看其值。注意,此代码段只遍历根节点的后代并不整个目录树。
    Do
        '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.
        Do
    '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
    					
  12. 使用控制台对象ReadLine方法来为多个控制台显示结尾处添加暂停随时显示上述结果。
    'Pause.
    Console.ReadLine()
    					
  13. 生成并运行您的控制台应用程序项目。

完整代码列表

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()

        Do
            '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.
                    Do
                        '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
				

参考

对于详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) Web站点:
在.net 中的 XML:.NET Framework XML 类和 C# 提供了简单、 可扩展的数据操作
http://msdn.microsoft.com/msdnmag/issues/01/01/xml

XPathNavigator
http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator.aspx

XPathDocument
http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathdocument.aspx

与 XslTransform 类的 XSLT 转换
http://msdn.microsoft.com/en-us/library/system.xml.xsl.xsltransform.aspx

XPath 示例
http://msdn.microsoft.com/en-us/library/ms256086.aspx
对于详细信息,请访问下面的万维网联合会 (W3C) Web 站点:
XML 路径语言 (XPath)
版本 1.0: W3C 建议 16 年 11 月1999
http://www.w3.org/TR/1999/REC-xpath-19991116

属性

文章编号: 301111 - 最后修改: 2012年7月5日 - 修订: 1.0
这篇文章中的信息适用于:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 标准版
  • Microsoft Visual .NET 2002 标准版
关键字:?
kbvs2005applies kbvs2005swept kbdownload kbsample kbhowtomaster kbmt KB301111 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 301111
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com