XmlNode.SelectNodes XmlNode.SelectNodes XmlNode.SelectNodes XmlNode.SelectNodes Method

定義

選取符合 XPath 運算式的節點清單。Selects a list of nodes matching the XPath expression.

多載

SelectNodes(String) SelectNodes(String) SelectNodes(String) SelectNodes(String)

選取符合 XPath 運算式的節點清單。Selects a list of nodes matching the XPath expression.

SelectNodes(String, XmlNamespaceManager) SelectNodes(String, XmlNamespaceManager) SelectNodes(String, XmlNamespaceManager) SelectNodes(String, XmlNamespaceManager)

選取符合 XPath 運算式的節點清單。Selects a list of nodes matching the XPath expression. 使用提供的 XmlNamespaceManager 解析 XPath 運算式中找到的任何前置詞。Any prefixes found in the XPath expression are resolved using the supplied XmlNamespaceManager.

備註

XPath 運算式可包含命名空間。XPath expressions can include namespaces. 命名空間解析可透過 XmlNamespaceManager 予以支援。Namespace resolution is supported using the XmlNamespaceManager. 如果 XPath 運算式包含前置詞,則必須將前置詞和命名空間 URI 配對加入XmlNamespaceManagerIf the XPath expression includes a prefix, the prefix and namespace URI pair must be added to the XmlNamespaceManager.

注意

如果 XPath 運算式不包含前置詞,則會假設命名空間 URI 是空的命名空間。If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. 如果您的 XML 包含預設命名空間,您仍然必須將前置詞和命名空間 URI XmlNamespaceManager加入至,否則將不會選取任何節點。If your XML includes a default namespace, you must still add a prefix and namespace URI to the XmlNamespaceManager; otherwise, you will not get any nodes selected.

如需詳細資訊,請參閱使用 XPath 導覽選取節點For more information, see Select Nodes Using XPath Navigation. 如需程式碼範例,請從上一節中的多載清單選擇多載。For code examples, choose an overload from the overload list in the previous section.

SelectNodes(String) SelectNodes(String) SelectNodes(String) SelectNodes(String)

選取符合 XPath 運算式的節點清單。Selects a list of nodes matching the XPath expression.

public:
 System::Xml::XmlNodeList ^ SelectNodes(System::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 String String String

XPath 運算式。The XPath expression.

傳回

XmlNodeList,包含符合 XPath 查詢的節點集合。An XmlNodeList containing a collection of nodes matching the XPath query.

例外狀況

XPath 運算式包含前置詞。The XPath expression contains a prefix. 請參閱 XPath 範例See XPath Examples.

範例

下列範例會選取作者姓氏為 Austen 的所有書籍,然後變更這些書籍的價格。The following example selects all books where the author's last name is Austen, and then changes the price of those books.

#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.IO;
using System.Xml;

public class Sample {

  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:This example uses the following 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接受做為其引數的多載。If the XPath expression requires namespace resolution, you must use the SelectNodes overload which takes an XmlNamespaceManager as its argument. XmlNamespaceManager是用來解析命名空間。The XmlNamespaceManager is used to resolve namespaces.

注意

如果 XPath 運算式不包含前置詞,則會假設命名空間 URI 是空的命名空間。If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. 如果您的 XML 包含預設命名空間,您仍然必須使用XmlNamespaceManager並在其中加入前置詞和命名空間 URI,否則將不會選取任何節點。If your XML includes a default namespace, you must still use the XmlNamespaceManager and add a prefix and namespace URI to it; otherwise, you will not get any nodes selected. 如需詳細資訊,請參閱使用 XPath 導覽選取節點For more information, see Select Nodes Using XPath Navigation.

注意

在運算式中包含單引號(')或雙引號(")時,常見的問題是在編寫 XPath 運算式。A common issue when formulating XPath expressions is how to include a single quote (') or double quote (") in the expression. 如果您必須搜尋包含單引號的值,則必須以雙引號括住字串。If you have to search for a value that includes a single quote, you must enclose the string in double quotes. 如果您需要搜尋包含雙引號的值,您必須以單引號括住字串。If you need to search for a value that includes a double quote, you must enclose the string in single quotes.

例如,假設您有下列 XML:For example, suppose you have the following XML:

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

下列 Visual Basic 程式碼會選取包含單引號的元素:The following Visual Basic code selects an element that contains single quotes:

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

這個方法是檔物件模型(DOM)的 Microsoft 擴充功能。This method is a Microsoft extension to the Document Object Model (DOM).

XmlNodeList基礎檔保持不變時,這個方法所傳回的物件將會是有效的。The XmlNodeList object returned by this method will be valid while the underlying document remains unchanged. 如果基礎檔變更,可能會傳回非預期的結果(不會擲回任何例外狀況)。If the underlying document changes, unexpected results may be returned (no exception will be thrown).

另請參閱

SelectNodes(String, XmlNamespaceManager) SelectNodes(String, XmlNamespaceManager) SelectNodes(String, XmlNamespaceManager) SelectNodes(String, XmlNamespaceManager)

選取符合 XPath 運算式的節點清單。Selects a list of nodes matching the XPath expression. 使用提供的 XmlNamespaceManager 解析 XPath 運算式中找到的任何前置詞。Any prefixes found in the XPath expression are resolved using the supplied XmlNamespaceManager.

public:
 System::Xml::XmlNodeList ^ SelectNodes(System::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 String String String

XPath 運算式。The XPath expression. 請參閱 XPath 範例See XPath Examples.

nsmgr
XmlNamespaceManager XmlNamespaceManager XmlNamespaceManager XmlNamespaceManager

XmlNamespaceManager,用來解析 XPath 運算式中前置詞的命名空間。An XmlNamespaceManager to use for resolving namespaces for prefixes in the XPath expression.

傳回

XmlNodeList,包含符合 XPath 查詢的節點集合。An XmlNodeList containing a collection of nodes matching the XPath query.

例外狀況

XPath 運算式包含未定義於 XmlNamespaceManager 中的前置詞。The XPath expression contains a prefix which is not defined in the XmlNamespaceManager.

範例

下列範例會顯示每個 ISBN 屬性的值。The following example displays the values of each of the ISBN attributes. 這個範例會使用XmlElement繼承XmlNode自類別的物件。This example uses an XmlElement object, which inherits from the XmlNode class.

#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檔案作為輸入。The example uses the file, booksort.xml, as input.


<?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 運算式可包含命名空間。XPath expressions can include namespaces. 命名空間解析可透過 XmlNamespaceManager 予以支援。Namespace resolution is supported using the XmlNamespaceManager. 如果 XPath 運算式包含前置詞,則必須將前置詞和命名空間 URI 配對加入XmlNamespaceManagerIf the XPath expression includes a prefix, the prefix and namespace URI pair must be added to the XmlNamespaceManager.

注意

如果 XPath 運算式不包含前置詞,則會假設命名空間 URI 是空的命名空間。If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. 如果您的 XML 包含預設命名空間,您仍然必須將前置詞和命名空間 URI XmlNamespaceManager加入至,否則將不會選取任何節點。If your XML includes a default namespace, you must still add a prefix and namespace URI to the XmlNamespaceManager; otherwise, you will not get any nodes selected. 如需詳細資訊,請參閱使用 XPath 導覽選取節點For more information, see Select Nodes Using XPath Navigation.

例如,如果您有下列 XML:For example, if you had the following XML:

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

下列C#程式碼會選取所有書籍節點:The following C# code selects all book nodes:

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

注意

在運算式中包含單引號(')或雙引號(")時,常見的問題是在編寫 XPath 運算式。A common issue when formulating XPath expressions is how to include a single quote (') or double quote (") in the expression. 如果您必須搜尋包含單引號的值,則必須以雙引號括住字串。If you have to search for a value that includes a single quote, you must enclose the string in double quotes. 如果您需要搜尋包含雙引號的值,您必須以單引號括住字串。If you need to search for a value that includes a double quote, you must enclose the string in single quotes.

例如,假設您有下列 XML:For example, suppose you have the following XML:

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

下列 Visual Basic 程式碼會選取包含單引號的元素:The following Visual Basic code selects an element that contains single quotes:

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 擴充功能。This method is a Microsoft extension to the Document Object Model (DOM).

XmlNodeList基礎檔保持不變時,這個方法所傳回的物件將會是有效的。The XmlNodeList object returned by this method will be valid while the underlying document remains unchanged. 如果基礎檔變更,可能會傳回非預期的結果(不會擲回任何例外狀況)。If the underlying document changes, unexpected results may be returned (no exception will be thrown).

另請參閱

適用於