共用方式為


使用 Visual C# 搭配 XPath 運算式查詢 XML

本文介紹如何使用 類別,使用 XPathNavigator XML 路徑語言 (XPath) 表達式來查詢XPathDocument物件。

原始產品版本: Visual Studio、.NET Framework
原始 KB 編號: 308333

摘要

XPath 會以程式設計方式用來評估表達式,並選取檔中的特定節點。

本文參考Microsoft .NET Framework 類別庫命名空間 System.Xml.XPath

本文假設您已熟悉下列主題:

  • Visual C#
  • XML 術語
  • 建立和讀取 XML 檔案
  • XPath 語法

使用 XPath 運算式查詢 XML

  1. 在 Visual Studio 中建立新的 Visual C# 控制台應用程式。

    注意

    • 此範例使用名為 Books.xml 的檔案。 您可以建立自己的Books.xml檔案,或使用 .NET 軟體開發工具包 (SDK) 快速入門隨附的範例。 如果您沒有安裝快速入門,而且不想安裝快速入門,請參閱 Books.xml下載位置的參考 一節。 如果您已安裝快速入門,則可以在 Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB 資料夾中找到檔案。 您可以將檔案 \Bin\Debug 複製到資料夾,該資料夾位於您建立此項目的資料夾底下。
  2. 請確定項目參考 System.Xml 命名空間。

  3. using在和 XPath 命名空間上使用 Xml 語句,因此您不需要在程式代碼稍後限定這些命名空間中的宣告。 您可以在任何其他宣告之前使用 using 語句,如下所示:

    using System.Xml;
    using System.Xml.XPath;
    
  4. 宣告適當的變數。 XPathDocument宣告物件來保存 XML 檔、XpathNavigator評估 XPath 表達式的物件,以及要逐一XPathNodeIterator查看所選節點的物件。 String宣告物件以保存 XPath 表達式。 在中的函式Class1Main新增宣告程序代碼。

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. XPathDocument使用範例檔案載入 Books.xml。 類別 XPathDocument 使用可擴充樣式表單語言轉換 (XSLT) 來提供快速且效能導向的 XML 檔案處理快取。 它類似於 XML 檔物件模型(DOM),但已針對 XSLT 處理和數據 XPath 模型進行高度優化。

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. XPathNavigator從檔案建立 。 對象 XPathNavigator 用於只讀 XPath 查詢。 XPath 查詢可能會傳回產生的值或許多節點。

    // Create a navigator to query with XPath.
    nav = docNav.CreateNavigator();
    
  7. 建立 XPath 運算式以尋找書籍的平均成本。 這個 XPath 運算式會傳回單一值。 如需 XPath 語法的完整詳細數據,請參閱參考一節中的 XPath 語法。

    // Find the average cost of a book.
    // This expression uses standard XPath syntax.
    strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";
    
  8. Evaluate使用物件的 方法XPathNavigator來評估 XPath 表達式。 方法 Evaluate 會傳回表達式的結果。

    // Use the Evaluate method to return the evaluated expression.
    Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));
    
  9. 建立 XPath 運算式,以尋找所有花費超過 10 美元的書籍。 這個 XPath 運算式只會從 XML 來源傳回 Title 節點。

    // Find the title of the books that are greater then $10.00.
    strExpression = "/bookstore/book/title[../price>10.00]";
    
  10. XPathNodeIterator使用 的 方法XPathNavigator,為選取Select的節點建立 。 XPathNodeIterator表示 XPath 節點集,並支援此節點集上的作業。

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. XPathNodeIterator使用 從的 方法傳Select回的 XPathNavigator,透過選取的節點移動。 在此情況下,您可以使用 MoveNextXPathNodeIterator 方法來逐一查看所有選取的節點。

    Console.WriteLine("List of expensive books:");
    //Iterate through the results showing the element value.
    while (NodeIter.MoveNext())
    {
        Console.WriteLine("Book Title: {0}", NodeIter.Current.Value);
    };
    
  12. ReadLine使用 方法,在控制台顯示結束時新增暫停,以更輕易地顯示上述結果。

    // Pause
    Console.ReadLine();
    
  13. 建置並執行專案。

    注意

    結果會顯示在主控台視窗中。

疑難排解

當您測試程式代碼時,可能會收到下列例外狀況錯誤訊息:

System.Xml.XmlException 類型的未處理例外狀況發生在System.xml.dll
其他資訊:系統錯誤。

例外狀況錯誤發生在下列程式代碼列上:

docNav = new XPathDocument("c:\\books.xml");

例外狀況錯誤是由無效的處理指令所造成。 例如,處理指令可能包含多餘的空格。 下列範例是無效的處理指令:

<?xml version='1.0' ?>

若要解決例外狀況,請使用下列其中一個解決方案:

  • 更正無效的處理指令。 下列範例是有效的處理指令:

    <?xml version='1.0'?>
    
  • 從Books.xml檔案中移除 XML 處理指令。

參考資料