XmlNode.SelectNodes Método

Definição

Seleciona uma lista de nós que correspondem à expressão XPath.

Sobrecargas

SelectNodes(String)

Seleciona uma lista de nós que correspondem à expressão XPath.

SelectNodes(String, XmlNamespaceManager)

Seleciona uma lista de nós que correspondem à expressão XPath. Todos os prefixos encontrados na expressão XPath são resolvidos usando o XmlNamespaceManager fornecido.

Comentários

As expressões XPath podem incluir namespaces A resolução de namespace tem suporte com o uso do XmlNamespaceManager. Se a expressão XPath incluir um prefixo, o par de URI de prefixo e namespace deverá ser adicionado ao XmlNamespaceManager.

Observação

Se a expressão XPath não incluir um prefixo, supõe-se que o URI do namespace seja o namespace vazio. Se o XML incluir um namespace padrão, você ainda deverá adicionar um prefixo e um URI de XmlNamespaceManagernamespace ao ; caso contrário, você não obterá nenhum nó selecionado.

Para obter mais informações, consulte Selecionar nós usando a navegação XPath. Para obter exemplos de código, escolha uma sobrecarga na lista de sobrecarga na seção anterior.

SelectNodes(String)

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

Parâmetros

xpath
String

A expressão XPath.

Retornos

XmlNodeList

Um XmlNodeList que contém uma coleção de nós que correspondem à consulta XPath.

Exceções

A expressão XPath contém um prefixo. Consulte Exemplos de XPath.

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.

#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

Este exemplo usa o seguinte 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 SelectNodes sobrecarga que usa um XmlNamespaceManager argumento como seu. Ele XmlNamespaceManager é usado para resolver namespaces.

Observação

Se a expressão XPath não incluir um prefixo, supõe-se que o URI do namespace seja o namespace vazio. Se o XML incluir um namespace padrão, você ainda deverá usar e XmlNamespaceManager adicionar um prefixo e um URI de namespace a ele; caso contrário, você não obterá nenhum nó selecionado. Para obter mais informações, consulte Selecionar nós usando a navegação XPath.

Observação

Um problema comum ao formular expressões XPath é como incluir uma única aspa (') ou uma aspa dupla (") na expressão. Se você precisar pesquisar um valor que inclua uma única aspa, deverá colocar a cadeia de caracteres entre aspas duplas. Se você precisar pesquisar um valor que inclua uma aspa dupla, deverá colocar a cadeia de caracteres entre aspas simples.

Por exemplo, suponha que você tenha o seguinte XML:

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

O código Visual Basic a seguir seleciona um elemento que contém aspas simples:

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

Esse método é uma extensão da Microsoft para o DOM (Modelo de Objeto de Documento).

O XmlNodeList objeto retornado por esse método será válido enquanto o documento subjacente permanecer inalterado. Se o documento subjacente for alterado, os resultados inesperados poderão ser retornados (nenhuma exceção será gerada).

Confira também

Aplica-se a

SelectNodes(String, XmlNamespaceManager)

Seleciona uma lista de nós que correspondem à expressão XPath. Todos os prefixos encontrados na expressão XPath são resolvidos usando o XmlNamespaceManager fornecido.

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

Parâmetros

xpath
String

A expressão XPath. Consulte Exemplos de XPath.

nsmgr
XmlNamespaceManager

Um XmlNamespaceManager a ser usado para resolução de namespaces para prefixos na expressão XPath.

Retornos

XmlNodeList

Um XmlNodeList que contém uma coleção de nós que correspondem à consulta XPath.

Exceções

A expressão XPath contém um prefixo que não está definido no XmlNamespaceManager.

Exemplos

O exemplo a seguir exibe os valores de cada um dos atributos ISBN. Este exemplo usa um XmlElement objeto, que herda da XmlNode classe.

#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.xmlcomo entrada.


<?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 namespaces A resolução de namespace tem suporte com o uso do XmlNamespaceManager. Se a expressão XPath incluir um prefixo, o par de URI de prefixo e namespace deverá ser adicionado ao XmlNamespaceManager.

Observação

Se a expressão XPath não incluir um prefixo, supõe-se que o URI do namespace seja o namespace vazio. Se o XML incluir um namespace padrão, você ainda deverá adicionar um prefixo e um URI de XmlNamespaceManagernamespace ao ; caso contrário, você não obterá nenhum nó selecionado. Para obter mais informações, consulte Selecionar nós usando a navegação XPath.

Por exemplo, se você tivesse o seguinte 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 do livro:

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 ao formular expressões XPath é como incluir uma única aspa (') ou uma aspa dupla (") na expressão. Se você precisar pesquisar um valor que inclua uma única aspa, deverá colocar a cadeia de caracteres entre aspas duplas. Se você precisar pesquisar um valor que inclua uma aspa dupla, deverá colocar a cadeia de caracteres entre aspas simples.

Por exemplo, suponha que você tenha o seguinte XML:

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

O código Visual Basic a seguir seleciona um elemento que contém aspas simples:

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 DOM (Modelo de Objeto de Documento).

O XmlNodeList objeto retornado por esse método será válido enquanto o documento subjacente permanecer inalterado. Se o documento subjacente for alterado, os resultados inesperados poderão ser retornados (nenhuma exceção será gerada).

Confira também

Aplica-se a