XmlNode.SelectNodes 方法

定义

选择匹配 XPath 表达式的节点列表。Selects a list of nodes matching the XPath expression.

重载

SelectNodes(String)

选择匹配 XPath 表达式的节点列表。Selects a list of nodes matching the XPath expression.

SelectNodes(String, XmlNamespaceManager)

选择匹配 XPath 表达式的节点列表。Selects a list of nodes matching the XPath expression. XPath 表达式中的任何前缀都使用提供的 XmlNamespaceManager 进行解析。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 对添加到 XmlNamespaceManager中。If 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)

选择匹配 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

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)

选择匹配 XPath 表达式的节点列表。Selects a list of nodes matching the XPath expression. XPath 表达式中的任何前缀都使用提供的 XmlNamespaceManager 进行解析。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

XPath 表达式。The XPath expression. 请参见 XPath 示例See XPath Examples.

nsmgr
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. 此示例使用从 XmlNode 类继承的 XmlElement 对象。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 对添加到 XmlNamespaceManager中。If 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).

另请参阅

适用于