この記事では、XPathNavigator
クラスを使用して、XML パス言語 (XPath) 式を使用してXPathDocument
オブジェクトに対してクエリを実行する方法について説明します。
元の製品バージョン: Visual Studio、.NET Framework
元の KB 番号: 308333
まとめ
XPath は、プログラムによって式を評価し、ドキュメント内の特定のノードを選択するために使用されます。
この記事では、Microsoft .NET Framework クラス ライブラリ名前空間 System.Xml.XPath
について説明します。
この記事では、次のトピックについて理解していることを前提としています。
- Visual C#
- XML の用語
- XML ファイルの作成と読み取り
- XPath 構文
XPath 式を使用して XML にクエリを実行する
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
フォルダーにコピーできます。
- この例では、 Books.xml という名前のファイルを使用します。 独自のBooks.xml ファイルを作成することも、.NET Software Development Kit (SDK) クイックスタートに含まれているサンプルを使用することもできます。 クイック スタートがインストールされておらず、インストールしたくない場合は、Books.xmlのダウンロード場所の References セクションを参照してください。 クイック スタートがインストールされている場合、ファイルは
プロジェクトが
System.Xml
名前空間を参照していることを確認します。Xml
およびXPath
名前空間でusing
ステートメントを使用して、コードの後半でこれらの名前空間の宣言を修飾する必要がないようにします。 次のように、他の宣言の前にusing
ステートメントを使用できます。using System.Xml; using System.Xml.XPath;
適切な変数を宣言します。 XML ドキュメントを保持する
XPathDocument
オブジェクト、XPath 式を評価するXpathNavigator
オブジェクト、および選択したノードを反復処理するXPathNodeIterator
オブジェクトを宣言します。 XPath 式を保持するString
オブジェクトを宣言します。Class1
のMain
関数に宣言コードを追加します。XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;
サンプル ファイル Books.xmlを使用して
XPathDocument
を読み込みます。XPathDocument
クラスは、拡張スタイルシート言語変換 (XSLT) を使用して、XML ドキュメント処理用の高速でパフォーマンス指向のキャッシュを提供します。 これは XML ドキュメント オブジェクト モデル (DOM) に似ていますが、XSLT 処理とXPath
データ モデル用に高度に最適化されています。// Open the XML. docNav = new XPathDocument(@"c:\books.xml");
ドキュメントから
XPathNavigator
を作成します。XPathNavigator
オブジェクトは、読み取り専用の XPath クエリに使用されます。 XPath クエリは、結果の値または多数のノードを返す場合があります。// Create a navigator to query with XPath. nav = docNav.CreateNavigator();
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)";
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));
XPath 式を作成して、10 ドルを超えるすべての書籍を検索します。 この XPath 式は、XML ソースから Title ノードのみを返します。
// Find the title of the books that are greater then $10.00. strExpression = "/bookstore/book/title[../price>10.00]";
XPathNavigator
のSelect
メソッドを使用して選択されたノードのXPathNodeIterator
を作成します。XPathNodeIterator
は XPath ノードセットを表し、このノードセットに対する操作をサポートします。// Select the node and place the results in an iterator. NodeIter = nav.Select(strExpression);
XPathNavigator
のSelect
メソッドから返されたXPathNodeIterator
を使用して、選択したノード間を移動します。 この場合は、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); };
ReadLine
メソッドを使用して、コンソールディスプレイの最後に一時停止を追加して、上記の結果をより簡単に表示します。// Pause Console.ReadLine();
プロジェクトをビルドして実行します。
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 処理命令を削除します。