如何: 使用 System.Xml.XPath 類別來執行 XPath 查詢

文章翻譯 文章翻譯
文章編號: 317069 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將逐步告訴您,如何使用類別 System.Xml.XPath 命名空間中,在.NET 應用程式中執行 XPath 查詢。

探索 System.Xml.XPath 命名空間

System.Xml.XPath 命名空間包含 XPath 剖析器和評估引擎的.NET Framework。System.Xml.XPath 命名空間支援全球資訊網協會 (W3C) XML 路徑語言 (XPath) 1.0 版建議事項。如需有關 XPath 建議事項的詳細資訊,請造訪下列 W3C 網站:
XML Path Language (XPath) Version 1.0
System.Xml.XPath 命名空間也包含下列類別,來執行 XPath 查詢,並以程式設計方式巡覽產生的 resultsets 最佳化:
  • XPathDocument: A 高效能讀取-只快取處理的 XML 文件和資料流。「 可延伸樣式表語言轉換 (XSLT) 處理,以及 XPath 資料模型,被最佳化 XPathDocumentXPathDocument 使用文件物件模型 (DOM)-根據剖析的模型 (載入到記憶體中樹狀結構的來源 XML),但是未實作必要的插入、 修改,或刪除 「 可延伸標記語言 」 (XML) 文件或資料流中的節點介面。
  • XPathNavigator: 本等級根據 XPath 資料模型。XPathNavigator 提供必要的方法,讓您執行針對 XPathDocument 會被載入的 XML 資料的 XPath 查詢。XPathNavigator 時請使用 XPathDocument 物件 CreateNavigator 方法具現化。您也可以使用 XPathNavigator 編譯經常執行的 XPath 查詢運算式,並產生 System.Xml.XPath.XPathExpression 物件,封裝已編譯的查詢。
  • XPathNodeIterator: 提供一個順向的-唯一,讀取-唯一 Iterator。使用 Select 方法 XPathNavigator 物件的執行 XPath 查詢時將建立 XPathNodeIterator 的執行個體。您可以使用 XPathNodeIterator 巡覽 XPath 查詢所產生的結果集。
  • XPathExpression: 封裝已編譯的 XPath 查詢運算式。您可以執行查詢運算式之前,您必須編譯的 XPath 查詢運算式。已編譯的 XPath 運算式包含被確認符合 W3C XPath 查詢語言規格的語法。編譯 方法 XPathNavigator 物件的呼叫會傳回 XPathExpression 類別。通常,您可以使用 XPathExpression 提供一個 XPathNavigator 物件的 Select 方法呼叫中先行編譯的 XPath 查詢運算式。
  • XPathException: [.NET Framework 例外狀況處理的 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 命名空間中。請注意一個字串對 SelectXPathNavigator 物件的方法呼叫中指定 XPath 查詢運算式的參數。
  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 查詢運算式的程式碼。對抗 Books.xml 和 DotNetBooks.xml 指定的 XPath 查詢的輸出會顯示如下:
    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 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.0
關鍵字:?
kbmt kbhowtomaster KB317069 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本: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