次の方法で共有


XmlNode.SelectNodes メソッド

定義

XPath 式と一致するノードのリストを選択します。

オーバーロード

SelectNodes(String)

XPath 式と一致するノードのリストを選択します。

SelectNodes(String, XmlNamespaceManager)

XPath 式と一致するノードのリストを選択します。 XPath 式で見つかったプリフィックスは、指定した XmlNamespaceManager を使用して解決されます。

注釈

XPath 式は名前空間を含むことができます。 名前空間の解決は XmlNamespaceManager を使用してサポートされます。 XPath 式にプレフィックスが含まれている場合は、プレフィックスと名前空間 URI のペアを に追加する XmlNamespaceManager必要があります。

注意

XPath 式にプレフィックスが含まれていない場合、名前空間 URI は空の名前空間であると見なされます。 XML に既定の名前空間が含まれている場合でも、プレフィックスと名前空間 URI を に追加する XmlNamespaceManager必要があります。それ以外の場合は、ノードは選択されません。

詳細については、「 XPath ナビゲーションを使用してノードを選択する」を参照してください。 コード例では、前のセクションのオーバーロードリストからオーバーロードを選択します。

SelectNodes(String)

ソース:
XmlNode.cs
ソース:
XmlNode.cs
ソース:
XmlNode.cs

XPath 式と一致するノードのリストを選択します。

public:
 System::Xml::XmlNodeList ^ SelectNodes(System::String ^ xpath);
public System.Xml.XmlNodeList? SelectNodes (string xpath);
public System.Xml.XmlNodeList SelectNodes (string xpath);
member this.SelectNodes : string -> System.Xml.XmlNodeList
Public Function SelectNodes (xpath As String) As XmlNodeList

パラメーター

xpath
String

XPath 式。

戻り値

XPath クエリと一致するノードのコレクションを格納している XmlNodeList

例外

XPath 式にプリフィックスが含まれています。 「XPath の例」をご覧ください。

次の使用例は、著者の姓が Austen であるすべての書籍を選択し、それらの書籍の価格を変更します。

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
{
   XmlDocument^ doc = gcnew XmlDocument;
   doc->Load( "booksort.xml" );
   XmlNodeList^ nodeList;
   XmlNode^ root = doc->DocumentElement;
   nodeList = root->SelectNodes( "descendant::book[author/last-name='Austen']" );
   
   //Change the price on the books.
   System::Collections::IEnumerator^ myEnum = nodeList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      XmlNode^ book = safe_cast<XmlNode^>(myEnum->Current);
      book->LastChild->InnerText = "15.95";
   }

   Console::WriteLine( "Display the modified XML document...." );
   doc->Save( Console::Out );
}
using System;
using System.Xml;

public class Sample6
{
    public static void Main()
    {
        XmlDocument doc = new XmlDocument();
        doc.Load("booksort.xml");

        XmlNodeList nodeList;
        XmlNode root = doc.DocumentElement;

        nodeList = root.SelectNodes("descendant::book[author/last-name='Austen']");

        //Change the price on the books.
        foreach (XmlNode book in nodeList)
        {
            book.LastChild.InnerText = "15.95";
        }

        Console.WriteLine("Display the modified XML document....");
        doc.Save(Console.Out);
    }
}
Imports System.IO
Imports System.Xml

public class Sample

  public shared sub Main()

    'Create the XmlDocument.
    Dim doc as XmlDocument = new XmlDocument()
    doc.Load("booksort.xml")
           
    Dim book as XmlNode
    Dim nodeList as XmlNodeList 
    Dim root as XmlNode = doc.DocumentElement

    nodeList=root.SelectNodes("descendant::book[author/last-name='Austen']")
 
    'Change the price on the books.
    for each book in nodeList      
      book.LastChild.InnerText="15.95"
    next 

    Console.WriteLine("Display the modified XML document....")
    doc.Save(Console.Out)
    
  end sub
end class

この例では、次の 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>

注釈

XPath 式で名前空間の解決が必要な場合は、 を SelectNodes 引数として受け取るオーバーロードを XmlNamespaceManager 使用する必要があります。 XmlNamespaceManagerは、名前空間を解決するために使用されます。

注意

XPath 式にプレフィックスが含まれていない場合、名前空間 URI は空の名前空間であると見なされます。 XML に既定の名前空間が含まれている場合でも、 を使用 XmlNamespaceManager し、プレフィックスと名前空間 URI を追加する必要があります。それ以外の場合、ノードは選択されません。 詳細については、「 XPath ナビゲーションを使用してノードを選択する」を参照してください。

注意

XPath 式を作成するときの一般的な問題は、式に単一引用符 (') または二重引用符 (") を含める方法です。 単一引用符を含む値を検索する必要がある場合は、文字列を二重引用符で囲む必要があります。 二重引用符を含む値を検索する必要がある場合は、文字列を単一引用符で囲む必要があります。

たとえば、次の XML があるとします。

<bookstore>
  <book>
    <title>&apos;Emma&apos;</title>
  </book>
</bookstore>

次の Visual Basic コードでは、単一引用符を含む要素を選択します。

nodeList = root.SelectNodes("//book[contains(title,""'Emma'"")]")

このメソッドは、ドキュメント オブジェクト モデル (DOM) に対する Microsoft の拡張機能です。

このメソッドによって返されるオブジェクトは XmlNodeList 有効ですが、基になるドキュメントは変更されません。 基になるドキュメントが変更されると、予期しない結果が返される可能性があります (例外はスローされません)。

こちらもご覧ください

適用対象

SelectNodes(String, XmlNamespaceManager)

ソース:
XmlNode.cs
ソース:
XmlNode.cs
ソース:
XmlNode.cs

XPath 式と一致するノードのリストを選択します。 XPath 式で見つかったプリフィックスは、指定した XmlNamespaceManager を使用して解決されます。

public:
 System::Xml::XmlNodeList ^ SelectNodes(System::String ^ xpath, System::Xml::XmlNamespaceManager ^ nsmgr);
public System.Xml.XmlNodeList? SelectNodes (string xpath, System.Xml.XmlNamespaceManager nsmgr);
public System.Xml.XmlNodeList SelectNodes (string xpath, System.Xml.XmlNamespaceManager nsmgr);
member this.SelectNodes : string * System.Xml.XmlNamespaceManager -> System.Xml.XmlNodeList
Public Function SelectNodes (xpath As String, nsmgr As XmlNamespaceManager) As XmlNodeList

パラメーター

xpath
String

XPath 式。 「XPath の例」をご覧ください。

nsmgr
XmlNamespaceManager

XPath 式のプリフィックスの名前空間を解決するために使用する XmlNamespaceManager

戻り値

XPath クエリと一致するノードのコレクションを格納している XmlNodeList

例外

XPath 式に、XmlNamespaceManager で定義されていないプリフィックスが含まれています。

次の例では、各 ISBN 属性の値を表示します。 この例では、 XmlElement クラスから継承する オブジェクトを XmlNode 使用します。

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Collections;
int main()
{
   XmlDocument^ doc = gcnew XmlDocument;
   doc->Load( "booksort.xml" );
   
   // Create an XmlNamespaceManager for resolving namespaces.
   XmlNamespaceManager^ nsmgr = gcnew XmlNamespaceManager( doc->NameTable );
   nsmgr->AddNamespace( "bk", "urn:samples" );
   
   // Select and display the value of all the ISBN attributes.
   XmlNodeList^ nodeList;
   XmlElement^ root = doc->DocumentElement;
   nodeList = root->SelectNodes( "/bookstore/book/@bk:ISBN", nsmgr );
   IEnumerator^ myEnum = nodeList->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      XmlNode^ isbn = safe_cast<XmlNode^>(myEnum->Current);
      Console::WriteLine( isbn->Value );
   }
}
using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {

      XmlDocument doc = new XmlDocument();
      doc.Load("booksort.xml");

      //Create an XmlNamespaceManager for resolving namespaces.
      XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
      nsmgr.AddNamespace("bk", "urn:samples");

      //Select and display the value of all the ISBN attributes.
      XmlNodeList nodeList;
      XmlElement root = doc.DocumentElement;
      nodeList = root.SelectNodes("/bookstore/book/@bk:ISBN", nsmgr);
      foreach (XmlNode isbn in nodeList){
        Console.WriteLine(isbn.Value);
      }
   }
}
Imports System.IO
Imports System.Xml

public class Sample

  public shared sub Main()

      Dim doc as XmlDocument = new XmlDocument()
      doc.Load("booksort.xml")

      'Create an XmlNamespaceManager for resolving namespaces.
      Dim nsmgr as XmlNamespaceManager = new XmlNamespaceManager(doc.NameTable)
      nsmgr.AddNamespace("bk", "urn:samples")

      'Select and display the value of all the ISBN attributes.
      Dim nodeList as XmlNodeList 
      Dim root as XmlElement = doc.DocumentElement
      nodeList = root.SelectNodes("/bookstore/book/@bk:ISBN", nsmgr)
      Dim isbn as XmlNode
      for each isbn in nodeList
        Console.WriteLine(isbn.Value)
      next

  end sub
end class

この例では、 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>

注釈

XPath 式は名前空間を含むことができます。 名前空間の解決は XmlNamespaceManager を使用してサポートされます。 XPath 式にプレフィックスが含まれている場合は、プレフィックスと名前空間 URI のペアを に追加する XmlNamespaceManager必要があります。

注意

XPath 式にプレフィックスが含まれていない場合、名前空間 URI は空の名前空間であると見なされます。 XML に既定の名前空間が含まれている場合でも、プレフィックスと名前空間 URI を に追加する XmlNamespaceManager必要があります。それ以外の場合は、ノードは選択されません。 詳細については、「 XPath ナビゲーションを使用してノードを選択する」を参照してください。

たとえば、次の XML がある場合は、次のようになります。

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

次の C# コードは、すべての書籍ノードを選択します。

XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");
XmlNodeList nodelist = doc.SelectNodes("//ab:book", nsmgr);

注意

XPath 式を作成するときの一般的な問題は、式に単一引用符 (') または二重引用符 (") を含める方法です。 単一引用符を含む値を検索する必要がある場合は、文字列を二重引用符で囲む必要があります。 二重引用符を含む値を検索する必要がある場合は、文字列を単一引用符で囲む必要があります。

たとえば、次の XML があるとします。

<bookstore xmlns="http://www.lucernepublishing.com">
  <book>
    <title>&apos;Emma&apos;</title>
  </book>
</bookstore>

次の Visual Basic コードでは、単一引用符を含む要素を選択します。

Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com")
nodeList = root.SelectNodes("//ab:book[contains(ab:title,""'Emma'"")]", nsmgr)

このメソッドは、ドキュメント オブジェクト モデル (DOM) に対する Microsoft の拡張機能です。

このメソッドによって返されるオブジェクトは XmlNodeList 有効ですが、基になるドキュメントは変更されません。 基になるドキュメントが変更されると、予期しない結果が返される可能性があります (例外はスローされません)。

こちらもご覧ください

適用対象