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

Definição

Seleciona uma lista de nós que correspondem à expressão XPath.Selects a list of nodes matching the XPath expression.

Sobrecargas

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

Seleciona uma lista de nós que correspondem à expressão XPath.Selects a list of nodes matching the XPath expression.

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

Seleciona uma lista de nós que correspondem à expressão XPath.Selects a list of nodes matching the XPath expression. Todos os prefixos encontrados na expressão XPath são resolvidos usando o XmlNamespaceManager fornecido.Any prefixes found in the XPath expression are resolved using the supplied XmlNamespaceManager.

Comentários

As expressões XPath podem incluir namespacesXPath expressions can include namespaces. A resolução de namespace tem suporte com o uso do XmlNamespaceManager.Namespace resolution is supported using the XmlNamespaceManager. Se a expressão XPath incluir um prefixo, o prefixo e o par de URI de namespace deverão ser adicionados ao XmlNamespaceManager.If the XPath expression includes a prefix, the prefix and namespace URI pair must be added to the XmlNamespaceManager.

Observação

Se a expressão XPath não incluir um prefixo, supõe-se que o URI do namespace é o namespace vazio.If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. Se o XML incluir um namespace padrão, você ainda deverá adicionar um prefixo e um URI de namespace ao XmlNamespaceManager; caso contrário, você não poderá obter nenhum nó selecionado.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.

Para obter mais informações, consulte selecionar nós usando a navegação XPath.For more information, see Select Nodes Using XPath Navigation. Para obter exemplos de código, escolha uma sobrecarga na lista de sobrecarga na seção anterior.For code examples, choose an overload from the overload list in the previous section.

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

Seleciona uma lista de nós que correspondem à expressão 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

Parâmetros

xpath
String String String String

A expressão XPath.The XPath expression.

Retornos

Um XmlNodeList que contém uma coleção de nós que correspondem à consulta XPath.An XmlNodeList containing a collection of nodes matching the XPath query.

Exceções

A expressão XPath contém um prefixo.The XPath expression contains a prefix. Consulte Exemplos de XPath.See XPath Examples.

Exemplos

O exemplo a seguir seleciona todos os livros em que o sobrenome do autor é Austen e, em seguida, altera o preço desses livros.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

Este exemplo usa o seguinte 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>

Comentários

Se a expressão XPath exigir resolução de namespace, você deverá usar a sobrecarga SelectNodes que usa um XmlNamespaceManager como seu argumento.If the XPath expression requires namespace resolution, you must use the SelectNodes overload which takes an XmlNamespaceManager as its argument. O XmlNamespaceManager é usado para resolver namespaces.The XmlNamespaceManager is used to resolve namespaces.

Observação

Se a expressão XPath não incluir um prefixo, supõe-se que o URI do namespace é o namespace vazio.If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. Se o XML incluir um namespace padrão, você ainda deverá usar o XmlNamespaceManager e adicionar um prefixo e um URI de namespace a ele; caso contrário, você não poderá obter nenhum nó selecionado.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. Para obter mais informações, consulte selecionar nós usando a navegação XPath.For more information, see Select Nodes Using XPath Navigation.

Observação

Um problema comum quando formular expressões XPath é como incluir uma aspa simples (') ou aspas duplas (") na expressão.A common issue when formulating XPath expressions is how to include a single quote (') or double quote (") in the expression. Se você precisar pesquisar um valor que inclua uma aspa simples, coloque a cadeia de caracteres entre aspas duplas.If you have to search for a value that includes a single quote, you must enclose the string in double quotes. Se você precisar pesquisar um valor que inclua aspas duplas, coloque a cadeia de caracteres entre aspas simples.If you need to search for a value that includes a double quote, you must enclose the string in single quotes.

Por exemplo, suponha que você tenha o seguinte XML:For example, suppose you have the following XML:

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

O código de Visual Basic a seguir seleciona um elemento que contém aspas simples:The following Visual Basic code selects an element that contains single quotes:

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

Esse método é uma extensão da Microsoft para o Modelo de Objeto do Documento (DOM).This method is a Microsoft extension to the Document Object Model (DOM).

O objeto XmlNodeList retornado por esse método será válido enquanto o documento subjacente permanecer inalterado.The XmlNodeList object returned by this method will be valid while the underlying document remains unchanged. Se o documento subjacente for alterado, resultados inesperados poderão ser retornados (nenhuma exceção será lançada).If the underlying document changes, unexpected results may be returned (no exception will be thrown).

Veja também

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

Seleciona uma lista de nós que correspondem à expressão XPath.Selects a list of nodes matching the XPath expression. Todos os prefixos encontrados na expressão XPath são resolvidos usando o XmlNamespaceManager fornecido.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

Parâmetros

xpath
String String String String

A expressão XPath.The XPath expression. Consulte Exemplos de XPath.See XPath Examples.

nsmgr
XmlNamespaceManager XmlNamespaceManager XmlNamespaceManager XmlNamespaceManager

Um XmlNamespaceManager a ser usado para resolução de namespaces para prefixos na expressão XPath.An XmlNamespaceManager to use for resolving namespaces for prefixes in the XPath expression.

Retornos

Um XmlNodeList que contém uma coleção de nós que correspondem à consulta XPath.An XmlNodeList containing a collection of nodes matching the XPath query.

Exceções

A expressão XPath contém um prefixo que não está definido no XmlNamespaceManager.The XPath expression contains a prefix which is not defined in the XmlNamespaceManager.

Exemplos

O exemplo a seguir exibe os valores de cada um dos atributos ISBN.The following example displays the values of each of the ISBN attributes. Este exemplo usa um objeto XmlElement, que herda da classe 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

O exemplo usa o arquivo, booksort.xml, como entrada.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>

Comentários

As expressões XPath podem incluir namespacesXPath expressions can include namespaces. A resolução de namespace tem suporte com o uso do XmlNamespaceManager.Namespace resolution is supported using the XmlNamespaceManager. Se a expressão XPath incluir um prefixo, o prefixo e o par de URI de namespace deverão ser adicionados ao XmlNamespaceManager.If the XPath expression includes a prefix, the prefix and namespace URI pair must be added to the XmlNamespaceManager.

Observação

Se a expressão XPath não incluir um prefixo, supõe-se que o URI do namespace é o namespace vazio.If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. Se o XML incluir um namespace padrão, você ainda deverá adicionar um prefixo e um URI de namespace ao XmlNamespaceManager; caso contrário, você não poderá obter nenhum nó selecionado.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. Para obter mais informações, consulte selecionar nós usando a navegação XPath.For more information, see Select Nodes Using XPath Navigation.

Por exemplo, se você tivesse o seguinte XML:For example, if you had the following XML:

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

O código C# a seguir seleciona todos os nós de livros: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);  

Observação

Um problema comum quando formular expressões XPath é como incluir uma aspa simples (') ou aspas duplas (") na expressão.A common issue when formulating XPath expressions is how to include a single quote (') or double quote (") in the expression. Se você precisar pesquisar um valor que inclua uma aspa simples, coloque a cadeia de caracteres entre aspas duplas.If you have to search for a value that includes a single quote, you must enclose the string in double quotes. Se você precisar pesquisar um valor que inclua aspas duplas, coloque a cadeia de caracteres entre aspas simples.If you need to search for a value that includes a double quote, you must enclose the string in single quotes.

Por exemplo, suponha que você tenha o seguinte XML:For example, suppose you have the following XML:

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

O código de Visual Basic a seguir seleciona um elemento que contém aspas simples: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)  

Esse método é uma extensão da Microsoft para o Modelo de Objeto do Documento (DOM).This method is a Microsoft extension to the Document Object Model (DOM).

O objeto XmlNodeList retornado por esse método será válido enquanto o documento subjacente permanecer inalterado.The XmlNodeList object returned by this method will be valid while the underlying document remains unchanged. Se o documento subjacente for alterado, resultados inesperados poderão ser retornados (nenhuma exceção será lançada).If the underlying document changes, unexpected results may be returned (no exception will be thrown).

Veja também

Aplica-se a