Visual C# .NET を使用して XPath 式で XML のクエリを実行する方法

文書翻訳 文書翻訳
文書番号: 308333 - 対象製品
この記事は、以前は次の ID で公開されていました: JP308333
すべて展開する | すべて折りたたむ

目次

概要

この資料では、XPathNavigator クラスを使用して XPath (XML Path 言語) 式で XPathDocument オブジェクトのクエリを実行する方法の例を示します。XPath はプログラムで使用され、式の評価およびドキュメント内の特定ノードの選択を行います。

必要条件

必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は次のとおりです。
  • Visual C# .NET
この資料は、次のトピックについて詳しい知識のあるユーザーを対象としています。
  • XML の用語
  • XML ファイルの作成と読み取り
  • XPath 構文

XPath 式を使用して XML のクエリを実行する方法

  1. Visual Studio .NET で新しい Visual C# .NET コンソール アプリケーションを作成します。

    : この例では、Books.xml という名前のファイルを使用します。独自の Books.xml ファイルを作成するか、.NET SDK (Software Development Kit) Quickstarts に含まれているサンプルを使用してください。Quickstarts がインストールされておらず、かつ Quickstarts をインストールしたくない場合は、「関連情報」で Books.xml のダウンロード場所を確認してください。Quickstarts をインストールしている場合は、このファイルは次のフォルダに格納されています。
    Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\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 オブジェクトを宣言します。宣言のコードを Class1 の Main 関数に追加します。
       XPathNavigator nav;
       XPathDocument docNav;
       XPathNodeIterator NodeIter;
       String strExpression;
    					
  5. サンプル ファイル Books.xml を使用して XPathDocument オブジェクトを読み込みます。XPathDocument クラスは、XSLT (Extensible Stylesheet Language Transformations) を使用して、XML ドキュメントの処理用に高速でパフォーマンスを重視したキャッシュを提供します。これは、XML DOM (Document Object Model) に似ていますが、XSLT の処理と XPath データ モデルに対して、より最適化されています。
        // Open the XML.
        docNav = new XPathDocument(@"c:\books.xml");
    					
  6. ドキュメントから XPathNavigator を作成します。XPathNavigator オブジェクトは、読み取り専用の XPath クエリに使用されます。XPath クエリは、1 つの結果値、または多くのノードを返します。
         // 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. XPathNavigator オブジェクトの Evaluate メソッドを使用して、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. 価格が 10 ドルよりも高い本をすべて検索する XPath 式を作成します。この XPath 式は、XML ソースから Title ノードのみを返します。
        // Find the title of the books that are greater then $10.00.
        strExpression = "/bookstore/book/title[../price>10.00]";
    					
  10. XPathNavigator の Select メソッドで選択されたノードに対して XPathNodeIterator を作成します。XPathNodeIterator は XPath ノードセットを表し、このノードセットでの操作をサポートします。
        // Select the node and place the results in an iterator.
        NodeIter = nav.Select(strExpression);
  11. 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);
      };
    					
  12. ReadLine メソッドを使用し、コンソールの表示の終わりに一時停止を追加して、上記の結果をより見やすくします。
        // Pause
        Console.ReadLine();
    					
  13. プロジェクトをビルドして実行します。結果がコンソール ウィンドウに表示されることに注意してください。

トラブルシューティング

コードをテストすると、次の例外エラー メッセージが表示されることがあります。
'System.Xml.XmlException' のハンドルされていない例外が System.xml.dll で発生しました。

追加情報 : システム エラーです。
この例外エラーは、コードの次の行で発生します。
docNav = new XPathDocument("c:\\books.xml");
				
この例外エラーは、無効な処理命令が原因で発生します。たとえば、処理命令に不要な空白が含まれている可能性があります。無効な処理命令の例を次に示します。
<?xml version='1.0' ?>
この例外を解決するには、次のいずれかの操作を実行します。
  • 無効な処理命令を修正します。有効な処理命令 (XML 宣言) の例を次に示します。
    <?xml version='1.0'?>
    または
  • XML の処理命令 (XML 宣言) を Books.xml ファイルから削除します。

関連情報

下記のファイルは、「Microsoft ダウンロード センター」からダウンロードできます。
元に戻す画像を拡大する
ダウンロード
Books.xml
詳細については、次のマイクロソフト Web サイトを参照してください。
XML in .NET: .NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation
http://msdn.microsoft.com/msdnmag/issues/01/01/xml/default.aspx

XPathNavigator クラス
http://msdn.microsoft.com/library/ja/cpref/html/frlrfSystemXmlXPathXPathNavigatorClassTopic.asp

XPathDocument クラス
http://msdn.microsoft.com/library/ja/cpref/html/frlrfSystemXmlXPathXPathDocumentClassTopic.asp

XPathNodeIterator クラス
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfSystemXmlXPathXPathNodeIteratorClassTopic.asp

XslTransform クラスを使用した XSLT 変換
http://www.microsoft.com/japan/msdn/library/ja/cpguide/html/cpconXSLTTransformationsWithXslTransformClass.asp

XPath Examples
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/1431789e-c545-4765-8c09-3057e07d3041.asp

XPath Syntax
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/daa75346-ccd1-4033-9250-9b9f3ba5762c.asp
XPath の詳細については、次の W3C (World Wide Web Consortium) Web サイトを参照してください。
XML Path Language (XPath)
Version 1.0: W3C Recommendation 16 November 1999
http://www.w3.org/TR/1999/REC-xpath-19991116

プロパティ

文書番号: 308333 - 最終更新日: 2006年9月4日 - リビジョン: 6.0
この資料は以下の製品について記述したものです。
  • Microsoft ADO.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
キーワード:?
kbdownload kbhowto kbhowtomaster KB308333
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com