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 にクエリを実行する
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
作成したフォルダーの下にあるフォルダーにコピーできます。
- この例では、 という名前のファイル Books.xml使用します。 独自の Books.xml ファイルを作成することも、.NET Software Development Kit (SDK) クイック スタートに含まれているサンプルを使用することもできます。 クイック スタートがインストールされておらず、インストールしたくない場合は、ダウンロード場所の Books.xml の 参照 セクションを参照してください。 クイック スタートがインストールされている場合、ファイルはフォルダーにあります
プロジェクトが名前空間を
System.Xml
参照していることを確認します。コードの
using
後半でXml
これらの名前空間の宣言を修飾する必要がないように、 およびXPath
名前空間の ステートメントを使用します。 ステートメントは、次のように、他の宣言の前に使用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;
XPathDocument
をサンプル ファイル Books.xml で読み込みます。 クラスでは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 構文の詳細については、「リファレンス」セクションの「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 式を
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));
XPath 式を作成して、10 ドルを超えるすべての書籍を見つけます。 この XPath 式は、XML ソースから Title ノードのみを返します。
// Find the title of the books that are greater then $10.00. strExpression = "/bookstore/book/title[../price>10.00]";
の メソッドを
XPathNodeIterator
使用してSelect
選択されたノードの を作成しますXPathNavigator
。 はXPathNodeIterator
XPath ノードセットを表し、このノードセットに対する操作をサポートします。// Select the node and place the results in an iterator. NodeIter = nav.Select(strExpression);
の
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); };
コンソールディスプレイの
ReadLine
最後に一時停止を追加して、上記の結果をより簡単に表示するには、 メソッドを使用します。// Pause Console.ReadLine();
プロジェクトをビルドして実行します。
注:
結果がコンソール ウィンドウに表示されます。
トラブルシューティング
コードをテストすると、次の例外エラー メッセージが表示されることがあります。
System.Xml 型の未処理の例外。XmlException が System.xml.dll で発生しました
追加情報: システム エラー。
例外エラーは、次のコード行で発生します。
docNav = new XPathDocument("c:\\books.xml");
例外エラーは、無効な処理命令によって発生します。 たとえば、処理命令に余分なスペースが含まれている場合があります。 次の例は、無効な処理命令です。
<?xml version='1.0' ?>
例外を解決するには、次のいずれかの解決策を使用します。
無効な処理命令を修正します。 次の例は、有効な処理命令です。
<?xml version='1.0'?>
Books.xml ファイルから XML 処理命令を削除します。
関連情報
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示