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 содержит префикс, то в XmlNamespaceManager необходимо добавить пару префиксов и URI пространства имен.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.

Примеры

В следующем примере выбираются все книги, в которых фамилия автора — Аустен, а затем изменяются цены на эти книги.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. @No__t-0 используется для разрешения пространств имен.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 (DOM).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. В этом примере используется объект 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 содержит префикс, то в XmlNamespaceManager необходимо добавить пару префиксов и URI пространства имен.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 (DOM).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).

Дополнительно

Применяется к