XmlNode.SelectNodes Método

Definición

Selecciona una lista de nodos que coinciden con la expresión XPath.

Sobrecargas

SelectNodes(String)

Selecciona una lista de nodos que coinciden con la expresión XPath.

SelectNodes(String, XmlNamespaceManager)

Selecciona una lista de nodos que coinciden con la expresión XPath. Los prefijos encontrados en la expresión XPath se resuelven utilizando el XmlNamespaceManager proporcionado.

Comentarios

Las expresiones XPath pueden incluir espacios de nombres. La resolución de espacios de nombres es compatible con XmlNamespaceManager. Si la expresión XPath incluye un prefijo, el par de URI de prefijo y espacio de nombres se debe agregar a XmlNamespaceManager.

Nota

Si la expresión XPath no incluye un prefijo, se supone que el URI del espacio de nombres es el espacio de nombres vacío. Si el XML incluye un espacio de nombres predeterminado, debe agregar un prefijo y un URI de espacio de nombres a XmlNamespaceManager; de lo contrario, no obtendrá ningún nodo seleccionado.

Para obtener más información, vea Seleccionar nodos mediante la navegación XPath. Para obtener ejemplos de código, elija una sobrecarga de la lista de sobrecargas de la sección anterior.

SelectNodes(String)

Selecciona una lista de nodos que coinciden con la expresión 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

Expresión XPath.

Devoluciones

XmlNodeList

XmlNodeList que contiene una colección de nodos que coinciden con la consulta XPath.

Excepciones

La expresión XPath contiene un prefijo. Vea ejemplos de XPath.

Ejemplos

En el ejemplo siguiente se seleccionan todos los libros donde el apellido del autor es Austen y, a continuación, cambia el precio de esos libros.

#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

En este ejemplo se usa el siguiente CÓDIGO 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>

Comentarios

Si la expresión XPath requiere resolución de espacio de nombres, debe usar la SelectNodes sobrecarga que toma un XmlNamespaceManager como argumento. XmlNamespaceManager se usa para resolver espacios de nombres.

Nota

Si la expresión XPath no incluye un prefijo, se supone que el URI del espacio de nombres es el espacio de nombres vacío. Si el XML incluye un espacio de nombres predeterminado, debe seguir usando XmlNamespaceManager y agregarle un prefijo y un URI de espacio de nombres; de lo contrario, no obtendrá ningún nodo seleccionado. Para obtener más información, vea Seleccionar nodos mediante la navegación XPath.

Nota

Un problema común al formular expresiones XPath es cómo incluir una comilla simple (') o comilla doble (") en la expresión. Si tiene que buscar un valor que incluya una comilla simple, debe incluir la cadena entre comillas dobles. Si necesita buscar un valor que incluya una comilla doble, debe incluir la cadena entre comillas simples.

Por ejemplo, supongamos que tiene el siguiente XML:

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

El código Visual Basic siguiente selecciona un elemento que contiene comillas simples:

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

Este método es una extensión de Microsoft al Modelo de objetos de documento (DOM).

El XmlNodeList objeto devuelto por este método será válido mientras el documento subyacente permanece sin cambios. Si cambia el documento subyacente, se pueden devolver resultados inesperados (no se producirá ninguna excepción).

Consulte también

Se aplica a

SelectNodes(String, XmlNamespaceManager)

Selecciona una lista de nodos que coinciden con la expresión XPath. Los prefijos encontrados en la expresión XPath se resuelven utilizando el XmlNamespaceManager proporcionado.

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

Expresión XPath. Vea ejemplos de XPath.

nsmgr
XmlNamespaceManager

XmlNamespaceManager que se utiliza para resolver los espacios de nombres de los prefijos de la expresión XPath.

Devoluciones

XmlNodeList

XmlNodeList que contiene una colección de nodos que coinciden con la consulta XPath.

Excepciones

La expresión XPath contiene un prefijo que no está definido en XmlNamespaceManager.

Ejemplos

En el ejemplo siguiente se muestran los valores de cada uno de los atributos ISBN. En este ejemplo se usa un XmlElement objeto , que hereda de la XmlNode clase .

#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

En el ejemplo se usa el archivo , 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>

Comentarios

Las expresiones XPath pueden incluir espacios de nombres. La resolución de espacios de nombres es compatible con XmlNamespaceManager. Si la expresión XPath incluye un prefijo, el par de URI de prefijo y espacio de nombres se debe agregar a XmlNamespaceManager.

Nota

Si la expresión XPath no incluye un prefijo, se supone que el URI del espacio de nombres es el espacio de nombres vacío. Si el XML incluye un espacio de nombres predeterminado, debe agregar un prefijo y un URI de espacio de nombres a XmlNamespaceManager; de lo contrario, no obtendrá ningún nodo seleccionado. Para obtener más información, vea Seleccionar nodos mediante la navegación XPath.

Por ejemplo, si tenía el siguiente CÓDIGO XML:

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

El código de C# siguiente selecciona todos los nodos de libro:

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

Nota

Un problema común al formular expresiones XPath es cómo incluir una comilla simple (') o comilla doble (") en la expresión. Si tiene que buscar un valor que incluya una comilla simple, debe incluir la cadena entre comillas dobles. Si necesita buscar un valor que incluya una comilla doble, debe incluir la cadena entre comillas simples.

Por ejemplo, supongamos que tiene el siguiente XML:

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

El código Visual Basic siguiente selecciona un elemento que contiene comillas 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)  

Este método es una extensión de Microsoft al Modelo de objetos de documento (DOM).

El XmlNodeList objeto devuelto por este método será válido mientras el documento subyacente permanece sin cambios. Si cambia el documento subyacente, se pueden devolver resultados inesperados (no se producirá ninguna excepción).

Consulte también

Se aplica a