XmlNode.SelectNodes 方法

定義

選取符合 XPath 運算式的節點清單。

多載

SelectNodes(String)

選取符合 XPath 運算式的節點清單。

SelectNodes(String, XmlNamespaceManager)

選取符合 XPath 運算式的節點清單。 使用提供的 XmlNamespaceManager 解析 XPath 運算式中找到的任何前置詞。

備註

XPath 運算式可包含命名空間。 命名空間解析可透過 XmlNamespaceManager 予以支援。 如果 XPath 運算式包含前置詞,則必須將前置詞和命名空間 URI 配對新增至 XmlNamespaceManager

注意

如果 XPath 運算式不包含前置詞,則會假設命名空間 URI 是空的命名空間。 如果您的 XML 包含預設命名空間,您仍必須將前置詞和命名空間 URI 新增至 XmlNamespaceManager ,否則不會選取任何節點。

如需詳細資訊,請參閱 使用 XPath 導覽選取節點。 如需程式碼範例,請從上一節的多載清單中選擇多載。

SelectNodes(String)

選取符合 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 運算式。

傳回

XmlNodeList

XmlNodeList,包含符合 XPath 查詢的節點集合。

例外狀況

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)

選取符合 XPath 運算式的節點清單。 使用提供的 XmlNamespaceManager 解析 XPath 運算式中找到的任何前置詞。

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

XmlNamespaceManager,用來解析 XPath 運算式中前置詞的命名空間。

傳回

XmlNodeList

XmlNodeList,包含符合 XPath 查詢的節點集合。

例外狀況

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此方法所傳回的物件將會有效,而基礎檔保持不變。 如果基礎檔變更,可能會傳回非預期的結果, (不會擲回任何例外狀況) 。

另請參閱

適用於