如何: 使用 System.Xml.XPath 类执行 XPath 查询

文章翻译 文章翻译
文章编号: 317069 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本分步指南介绍演示如何在.net 应用程序中执行 XPath 查询 System.Xml.XPath 命名空间中使用类。

探索 System.Xml.XPath 命名空间

System.Xml.XPath 命名空间包含 XPath 分析器和.net 框架的评估引擎。System.Xml.XPath 命名空间支持万维网联合会 (W3C) XML 路径语言 (XPath) 版本 1.0 建议。有关 XPath 建议的详细信息,请访问以下 W3C 网站:
XML Path Language (XPath) Version 1.0
System.Xml.XPath 命名空间还包含执行 XPath 查询并以编程方式定位生成的 resultsets 优化的以下类:
  • XPathDocument: 一个高性能读取-仅缓存用于处理 XML 文档和流。XPathDocument 专为可扩展样式表语言转换 (XSLT) 处理和 XPath 数据模型。XPathDocument 使用文档对象模型 (DOM)-基于分析模型 (将源 XML 加载到内存中的树结构中),但不实现接口所需插入、 修改,或删除在可扩展标记语言 (XML) 文档或流中的节点。
  • XPathNavigator: 此类根据 XPath 数据模型。XPathNavigator 提供了为您执行对 XML 数据加载到一个 XPathDocument 的 XPath 查询所需的方法。通过使用 CreateNavigator 方法 XPathDocument 对象的实例化 XPathNavigator。您还可以使用 XPathNavigator 编译经常执行的 XPath 查询表达式,并生成 System.Xml.XPath.XPathExpression 对象封装已编译的查询。
  • XPathNodeIterator: 提供一个正向-唯一,读-唯一的迭代。当您使用 XPathNavigator 对象的 Select 方法执行 XPath 查询时,创建 XPathNodeIterator 的实例。您可以使用 XPathNodeIterator 导航生成的 XPath 查询在结果集。
  • XPathExpression: 封装在已编译的 XPath 查询表达式。您可以执行查询表达式之前,您必须编译的 XPath 查询表达式。已编译的 XPath 表达式包含验证以符合 W3C XPath 查询语言规范的语法。XPathNavigator 对象的 编译 方法的调用返回 XPathExpression 类。通常,您可以使用 XPathExpression 提供预编译的 XPath 查询表达式中调用 Select 方法 XPathNavigator 对象。
  • XPathException:.net 框架异常处理的 XPath 查询表达式时出现错误时生成的。在 Select 方法和 XPathNavigator 类的 编译 方法可以引发 XPathException

创建示例 XML 文档

若要进行后续的.net 代码示例所使用的两个示例 XML 文档,请按照下列步骤操作:
  1. 使用记事本或类似的文本编辑器,将以下代码粘贴新的 XML 文档中名为 Books.xml。将文档保存在根文件夹中,您的硬盘上
    <?xml version='1.0'?>
    <Books>
    <Book>
      <Title>Beginning XML</Title>
      <Publisher>Wrox</Publisher>
    </Book>
    <Book>
      <Title>XML Step by Step</Title>
      <Publisher>MSPress</Publisher>
    </Book>
    <Book>
      <Title>Professional XML</Title>
      <Publisher>Wrox</Publisher>
    </Book>
    <Book>
      <Title>Developing XML solutions</Title>
      <Publisher>MSPress</Publisher>
    </Book>
    </Books>
    					
  2. 使用记事本或类似的文本编辑器,将以下代码粘贴新的 XML 文档中名为 DotNetBooks.xml。将文档保存在根文件夹中,您的硬盘上
    <?xml version='1.0'?>
    <DotNetBooks>
    <DotNetBook>
      <Title>Professional C#</Title>
      <Publisher>Wrox</Publisher>
    </DotNetBook>
    <DotNetBook>
      <Title>ADO.Net Core Reference</Title>
      <Publisher>MSPress</Publisher>
    </DotNetBook>
    <DotNetBook>
      <Title>Professional VB.Net</Title>
      <Publisher>Wrox</Publisher>
    </DotNetBook>
    <DotNetBook>
      <Title>Inside C#</Title>
      <Publisher>MSPress</Publisher>
    </DotNetBook>
    </DotNetBooks>

创建 Visual Basic.net 项目

  1. 启动 Visual Studio.net,然后创建一个新的 Visual Basic.net Windows 应用程序项目。
  2. 将两个 按钮 控件从工具箱拖放到 Form1.vb 上。
  3. 将以下代码粘贴到在 Click_Event 的过程中的第一个命令按钮:
    'Instantiate the XPathDocument class.
    Dim xmldoc As New System.Xml.XPath.XPathDocument("c:\books.xml")
    
    'Instantiate the XPathNavigator class.
    Dim nav As System.Xml.XPath.XPathNavigator = xmldoc.CreateNavigator()
    
    'Instantiate the XPathIterator class.
    Dim iterator As System.Xml.XPath.XPathNodeIterator = nav.Select("//Publisher[. = 'MSPress']/parent::node()/Title")
    
    'Use the XPathIterator class to navigate through the generated resultset
    'and then display the selected Titles.
    Do While iterator.MoveNext
        System.Diagnostics.Debug.WriteLine(iterator.Current.Value)
    Loop
    					
  4. 读取内嵌批注,以了解代码的功能。请注意特定代码实例化和 System.Xml.XPath 命名空间中使用的每个类的对象实例的方式。请注意一个字符串,指定 XPath 查询表达式参数在 Select 方法 XPathNavigator 对象的调用。
  5. 将以下代码粘贴到在 Click_Event 的过程中的第二个命令按钮:
    'Construct the XPathDocument by specifying the path to Books.xml.
    Dim xmldoc As New System.Xml.XPath.XPathDocument("c:\books.xml")
    
    'Create the XPathNavigator.
    Dim nav As System.Xml.XPath.XPathNavigator = xmldoc.CreateNavigator()
    
    'Compile the XPath query expression to identify all MSPress Titles.
    'The Compile method of the XPathNavigator generates an XPathExpression object
    'that encapsulates the compiled query expression.
    
    Dim expr As System.Xml.XPath.XPathExpression = nav.Compile("//Publisher[. = 'MSPress']/parent::node()/Title")
    
    'Execute the Select method of the XPathNavigator to create the XPathNodeIterator.
    'Note that the sample code supplies the XPathExpression object as the query expression parameter.
    Dim iterator As System.Xml.XPath.XPathNodeIterator = nav.Select(expr)
    
    System.Diagnostics.Debug.WriteLine("MSPress titles in books.xml...")
    System.Diagnostics.Debug.WriteLine("******************************")
    
    'Use the iterator to navigate the generated resultset.
    Do While iterator.MoveNext
        System.Diagnostics.Debug.WriteLine(iterator.Current.Value)
    Loop
    
    
    'Release the XPathDocument and XPathNavigator.
    xmldoc = Nothing
    nav = Nothing
    
    System.Diagnostics.Debug.WriteLine(vbCrLf & "MSPress titles in DotNetBooks.xml...")
    System.Diagnostics.Debug.WriteLine("******************************")
    
    'Specify the path to DotNetBooks.xml to reconstruct the XPathDocument.
    xmldoc = New System.Xml.XPath.XPathDocument("c:\DotNetBooks.xml")
    
    'Create the XPathNavigator.
    nav = xmldoc.CreateNavigator()
    
    'Reuse the XPathExpression that you compiled previously to locate
    'all MSPress titles in DotNetBooks.xml.
    
    'You can reuse the XPathExpression because the hierarchy of elements that are referenced
    'in the XPath query is the same in Books.xml and DotNetBooks.xml. 
    'For example, the Publisher element is a child of the Title element in both XML documents.
    'The hierarchy must be identical for you to reuse the same XPathExpression object
    'across different XML documents/streams.
    
    'When you use an XPathExpression object, and the Select method executes,
    'the XPath query is not recompiled. 
    
    iterator = nav.Select(expr)
    
    'Use the iterator to navigate the generated resultset.
    Do While iterator.MoveNext
         System.Diagnostics.Debug.WriteLine(iterator.Current.Value)
    Loop
    					
  6. 读取内嵌批注,以了解代码的功能。请注意特定示例代码实例化 XPathExpression 对象第一次 (针对 Books.xml) 和 XPath 查询执行第二次 (针对 DotNetBooks.xml) 时再重新使用该对象的方式。

测试项目

  1. 将所做的更改保存到 Visual Basic.net 项目,然后执行该项目。
  2. 在窗体在出现时单击第一个命令按钮执行到指定 XPath 查询表达式中使用一个字符串,该代码。指定的 XPath 查询,对 Books.xml 的输出如下所示:
    XML Step by Step
    Developing XML solutions
    					
  3. 单击第二个命令按钮执行使用 XPathExpression 对象指定 XPath 查询表达式的代码。指定的 XPath 查询,针对 Books.xml 和 DotNetBooks.xml 的输出如下所示:
    MSPress titles in books.xml...
    ******************************
    XML Step by Step
    Developing XML solutions
    
    MSPress titles in DotNetBooks.xml...
    ******************************
    ADO.Net Core Reference
    Inside C#
    					

属性

文章编号: 317069 - 最后修改: 2005年8月12日 - 修订: 4.2
这篇文章中的信息适用于:
  • Microsoft .NET Framework 1.1
  • Microsoft Visual Basic .NET 2003 标准版
  • Microsoft Visual .NET 2002 标准版
  • Microsoft .NET Framework 1.0
关键字:?
kbmt kbhowtomaster KB317069 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 317069
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