次の方法で共有


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# コンソール アプリケーションを作成します。

    Note

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

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

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

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. サンプル ファイル Books.xmlを使用して XPathDocument を読み込みます。 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 構文の詳細については、「 References 」セクションの「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 式を評価するには、XPathNavigator オブジェクトの Evaluate メソッドを使用します。 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. XPathNavigatorSelectメソッドを使用して選択されたノードのXPathNodeIteratorを作成します。 XPathNodeIteratorは XPath ノードセットを表し、このノードセットに対する操作をサポートします。

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

    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. プロジェクトをビルドして実行します。

    Note

    結果はコンソール ウィンドウに表示されます。

トラブルシューティング

コードをテストすると、次の例外エラー メッセージが表示されることがあります。

System.xml.dll で System.Xml.Xml.XmlException 型のハンドルされない例外が発生しました
追加情報: システム エラー。

例外エラーは、次のコード行で発生します。

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

例外エラーは、無効な処理命令が原因で発生します。 たとえば、処理命令に余分なスペースが含まれている場合があります。 次の例は、無効な処理命令です。

<?xml version='1.0' ?>

例外を解決するには、次のいずれかの解決策を使用します。

  • 無効な処理命令を修正します。 有効な処理命令の例を次に示します。

    <?xml version='1.0'?>
    
  • Books.xml ファイルから XML 処理命令を削除します。

関連情報