次の方法で共有


XPathNavigator.Select メソッド (XPathExpression)

指定した XPathExpression を使用して、ノード セットを選択します。

Overloads Public Overridable Function Select( _
   ByVal expr As XPathExpression _) As XPathNodeIterator
[C#]
public virtual XPathNodeIterator Select(XPathExpressionexpr);
[C++]
public: virtual XPathNodeIterator* Select(XPathExpression* expr);
[JScript]
public function Select(
   expr : XPathExpression) : XPathNodeIterator;

パラメータ

  • expr
    XPathExpression。

戻り値

選択されたノード セットを指している XPathNodeIterator

例外

例外の種類 条件
ArgumentException expr にエラーが含まれているか、またはその戻り値の型がノード セットではありません。

解説

選択項目のコンテキストは、このメソッドを呼び出したときのナビゲータの位置です。このメソッドを呼び出すと、返される XPathNodeIterator は、選択したノードのセットを表します。 XPathNodeIteratorMoveNext を使用して、選択したノード セットをウォークします。 XPathNavigator で任意の Move メソッドを使用して、現在のノード ツリー内を移動します。 XPathNavigator ナビゲーション メソッドは、選択したノードおよび XPathNodeIterator に依存しません。

選択したノード セットをウォークする C# コードを次に示します。

XPathNodeIterator ni = nav.Select(expr);
while (ni.MoveNext()){
 Console.WriteLine(ni.Current.Name);
}
   

XPathExpression で名前空間の解決が必要な場合は、プリフィックスおよび名前空間 URI ペアを XmlNamespaceManager に追加し、 XPathExpression.SetContext メソッドを呼び出して、名前空間の解決に使用する XmlNamespaceManager を指定する必要があります。

たとえば、ドキュメントに XML ノードが含まれているとします。

<bookstore xmlns:bk='urn:samples'>
  <book bk:ISBN='1-325-0980'>
    <title>Pride And Prejudice</title>
  </book>
</bookstore>

bk:ISBN ノードを選択する C# コードを次に示します。

XPathExpression expr = nav.Compile("book/@bk:ISBN");
XmlNamespaceManager mngr = new XmlNamespaceManager(new NameTable());
mngr.AddNamespace("bk","urn:samples");
expr.SetContext(mngr);
XPathNodeIterator ni = nav.Select(expr);

メモ   XPathExpression にプリフィックスが含まれていない場合、名前空間 URI は、空の名前空間であると見なされます。XML に既定の名前空間が含まれている場合は、 SetContext メソッドを使用し、プリフィックスと名前空間 URI を含んでいる XmlNamespaceManager を提供して、既定の名前空間を処理する必要があります。

たとえば、次の XML がある場合を示します。

<bookstore xmlns="http://www.lucernepublishing.com">
 <book>
 <title>Pride And Prejudice</title>
 </book>
</bookstore>

すべての book ノードを選択する C# コードを次に示します。

XmlNamespaceManager nsmgr = new XmlNamespaceManager(nav.NameTable);
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");
XPathExpression expr;
expr = nav.Compile("//ab:book");
expr.SetContext(nsmgr);
XPathNodeIterator ni = nav.Select(expr);

Select を再度呼び出すと、新しい Select 呼び出しと一致する、選択したノード セットを指す新しい XPathNodeIterator が返されます。2 つの XPathNodeIterator オブジェクトが互いに完全に独立しています。

このメソッドは、 XPathNavigator 状態には影響を与えません。

使用例

[Visual Basic, C#, C++] Jane Austen の著書をすべて選択し、タイトル順に並べ替える例を次に示します。

 
Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.XPath

public class Sample

  public shared sub Main()

     Dim doc as XPathDocument = new XPathDocument("booksort.xml")
     Dim nav as XPathNavigator = doc.CreateNavigator()

     'Select all books by Jane Austen.
     Dim expr as XPathExpression 
     expr = nav.Compile("descendant::book[author/last-name='Austen']")

     'Sort the selected books by title.
     expr.AddSort("title", XmlSortOrder.Ascending, XmlCaseOrder.None, "", XmlDataType.Text)

     'Display the selection.
     Dim iterator as XPathNodeIterator = nav.Select(expr)
     while (iterator.MoveNext())
        Dim nav2 as XPathNavigator = iterator.Current.Clone()
        nav2.MoveToFirstChild()
        Console.WriteLine("Book title:  {0}", nav2.Value)
     end while
  end sub
end class

[C#] 
using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;

public class Sample
{
  public static void Main()
  {

      XPathDocument doc = new XPathDocument("booksort.xml");
      XPathNavigator nav = doc.CreateNavigator();

      //Select all books by Jane Austen.
      XPathExpression expr; 
      expr = nav.Compile("descendant::book[author/last-name='Austen']");

      //Sort the selected books by title.
      expr.AddSort("title", XmlSortOrder.Ascending, XmlCaseOrder.None, "", XmlDataType.Text);

      //Display the selection.
      XPathNodeIterator iterator = nav.Select(expr);
      while (iterator.MoveNext()){
        XPathNavigator nav2 = iterator.Current.Clone();
        nav2.MoveToFirstChild();
        Console.WriteLine("Book title:  {0}", nav2.Value);
      }
   }

}

[C++] 
#using <mscorlib.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::XPath;

int main()
{

   XPathDocument* doc = new XPathDocument(S"booksort.xml");
   XPathNavigator* nav = doc->CreateNavigator();

   //Select all books by Jane Austen.
   XPathExpression* expr; 
   expr = nav->Compile(S"descendant::book[author/last-name='Austen']");

   //Sort the selected books by title.
   expr->AddSort(S"title", XmlSortOrder::Ascending, XmlCaseOrder::None, S"", XmlDataType::Text);

   //Display the selection.
   XPathNodeIterator* iterator = nav->Select(expr);
   while (iterator->MoveNext()){
      XPathNavigator* nav2 = iterator->Current->Clone();
      nav2->MoveToFirstChild();
      Console::WriteLine(S"Book title:  {0}", nav2->Value);
   }
}

[Visual Basic, C#, C++] この例では、入力として、 booksort.xml というファイルを使用しています。

<?xml version="1.0"?>
<!-- a fragment of a book store inventory database -->
<bookstore xmlns:bk="urn:samples">
  <book genre="novel" publicationdate="1997" bk:ISBN="1-861001-57-8">
    <title>Pride And Prejudice</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>24.95</price>
  </book>
  <book genre="novel" publicationdate="1992" bk:ISBN="1-861002-30-1">
    <title>The Handmaid's Tale</title>
    <author>
      <first-name>Margaret</first-name>
      <last-name>Atwood</last-name>
    </author>
    <price>29.95</price>
  </book>
  <book genre="novel" publicationdate="1991" bk:ISBN="1-861001-57-6">
    <title>Emma</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>19.95</price>
  </book>
  <book genre="novel" publicationdate="1982" bk:ISBN="1-861001-45-3">
    <title>Sense and Sensibility</title>
    <author>
      <first-name>Jane</first-name>
      <last-name>Austen</last-name>
    </author>
    <price>19.95</price>
  </book>
</bookstore>

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

XPathNavigator クラス | XPathNavigator メンバ | System.Xml.XPath 名前空間 | XPathNavigator.Select オーバーロードの一覧 | SelectNodes | SelectSingleNode | SelectDescendants | SelectChildren | SelectAncestors