Visual C# を使用して XPath 式を使用して XML にクエリを実行する

この記事では、 クラスを XPathDocument 使用して XML パス言語 (XPath) 式を使用してオブジェクトにクエリを実行する XPathNavigator 方法について説明します。

元の製品バージョン: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 Software Development Kit (SDK) クイック スタートに含まれているサンプルを使用することもできます。 クイック スタートがインストールされておらず、インストールしたくない場合は、ダウンロード場所の Books.xml の 参照 セクションを参照してください。 クイック スタートがインストールされている場合、ファイルはフォルダーにあります Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB 。 ファイルは、このプロジェクトを \Bin\Debug 作成したフォルダーの下にあるフォルダーにコピーできます。
  2. プロジェクトが名前空間を System.Xml 参照していることを確認します。

  3. コードの using 後半で Xml これらの名前空間の宣言を修飾する必要がないように、 および XPath 名前空間の ステートメントを使用します。 ステートメントは、次のように、他の宣言の前に使用 using できます。

    using System.Xml;
    using System.Xml.XPath;
    
  4. 適切な変数を宣言します。 XML ドキュメントを XPathDocument 保持するオブジェクト、XPath 式を XpathNavigator 評価するオブジェクト、選択したノードを XPathNodeIterator 反復処理するオブジェクトを宣言します。 XPath 式を String 保持するオブジェクトを宣言します。 の 関数Class1に宣言コードをMain追加します。

    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 式は、1 つの値を返します。 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. XPath 式を Evaluate 評価するには、 XPathNavigator オブジェクトの メソッドを使用します。 メソッドは 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 使用して Select 選択されたノードの を作成します XPathNavigator。 は XPathNodeIterator XPath ノードセットを表し、このノードセットに対する操作をサポートします。

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. XPathNodeIteratorメソッドXPathNavigatorから返された を使用して、Select選択したノードを移動します。 この場合は、 の XPathNodeIterator メソッドをMoveNext使用して、選択したすべてのノードを反復処理できます。

    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 処理命令を削除します。

関連情報