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

Definición

Selecciona una lista de nodos que coinciden con la expresión XPath.Selects a list of nodes matching the XPath expression.

Sobrecargas

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

Selecciona una lista de nodos que coinciden con la expresión XPath.Selects a list of nodes matching the XPath expression.

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

Selecciona una lista de nodos que coinciden con la expresión XPath.Selects a list of nodes matching the XPath expression. Los prefijos encontrados en la expresión XPath se resuelven utilizando el XmlNamespaceManager proporcionado.Any prefixes found in the XPath expression are resolved using the supplied XmlNamespaceManager.

Comentarios

Las expresiones XPath pueden incluir espacios de nombres.XPath expressions can include namespaces. La resolución de espacios de nombres es compatible con XmlNamespaceManager.Namespace resolution is supported using the XmlNamespaceManager. Si la expresión XPath incluye un prefijo, el par de prefijos y URI de espacio de nombres debe agregarse al XmlNamespaceManager.If the XPath expression includes a prefix, the prefix and namespace URI pair must be added to the XmlNamespaceManager.

Nota

Si la expresión XPath no incluye un prefijo, se supone que el identificador URI de espacio de nombres es el espacio de nombres vacío.If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. Si el código XML incluye un espacio de nombres predeterminado, debe agregar un prefijo y un identificador URI de espacio de nombres al XmlNamespaceManager; de lo contrario, no recibirá ningún nodo seleccionado.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 obtener más información, vea seleccionar nodos con la navegación XPath.For more information, see Select Nodes Using XPath Navigation. Para ver ejemplos de código, elija una sobrecarga de la lista de sobrecargas en la sección anterior.For code examples, choose an overload from the overload list in the previous section.

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

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

Expresión XPath.The XPath expression.

Devoluciones

XmlNodeList que contiene una colección de nodos que coinciden con la consulta XPath.An XmlNodeList containing a collection of nodes matching the XPath query.

Excepciones

La expresión XPath contiene un prefijo.The XPath expression contains a prefix. Vea ejemplos de XPath.See XPath Examples.

Ejemplos

En el ejemplo siguiente se seleccionan todos los libros en los que el apellido del autor es Austen y, a continuación, se cambia el precio de dichos libros.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

En este ejemplo se usa el siguiente código 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>

Comentarios

Si la expresión XPath requiere la resolución de espacios de nombres, debe usar la sobrecarga SelectNodes que toma XmlNamespaceManager como argumento.If the XPath expression requires namespace resolution, you must use the SelectNodes overload which takes an XmlNamespaceManager as its argument. El XmlNamespaceManager se usa para resolver los espacios de nombres.The XmlNamespaceManager is used to resolve namespaces.

Nota

Si la expresión XPath no incluye un prefijo, se supone que el identificador URI de espacio de nombres es el espacio de nombres vacío.If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. Si el código XML incluye un espacio de nombres predeterminado, debe usar el XmlNamespaceManager y agregarle un prefijo y un identificador URI de espacio de nombres; de lo contrario, no recibirá ningún nodo seleccionado.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 obtener más información, vea seleccionar nodos con la navegación XPath.For more information, see Select Nodes Using XPath Navigation.

Nota

Un problema común al formular expresiones XPath es cómo incluir una comilla simple (') o una comilla doble (") en la expresión.A common issue when formulating XPath expressions is how to include a single quote (') or double quote (") in the expression. Si tiene que buscar un valor que incluya una comilla simple, debe escribir la cadena entre comillas dobles.If you have to search for a value that includes a single quote, you must enclose the string in double quotes. Si necesita buscar un valor que incluya comillas dobles, debe incluir la cadena entre comillas simples.If you need to search for a value that includes a double quote, you must enclose the string in single quotes.

Por ejemplo, supongamos que tiene el siguiente código XML:For example, suppose you have the following XML:

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

En el siguiente código de Visual Basic se selecciona un elemento que contiene comillas simples:The following Visual Basic code selects an element that contains single quotes:

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

Este método es una extensión de Microsoft para el Document Object Model (DOM).This method is a Microsoft extension to the Document Object Model (DOM).

El objeto XmlNodeList devuelto por este método será válido, mientras que el documento subyacente permanece inalterado.The XmlNodeList object returned by this method will be valid while the underlying document remains unchanged. Si cambia el documento subyacente, se pueden devolver resultados inesperados (no se producirá ninguna excepción).If the underlying document changes, unexpected results may be returned (no exception will be thrown).

Consulte también:

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

Selecciona una lista de nodos que coinciden con la expresión XPath.Selects a list of nodes matching the XPath expression. Los prefijos encontrados en la expresión XPath se resuelven utilizando el XmlNamespaceManager proporcionado.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

Expresión XPath.The XPath expression. Vea ejemplos de XPath.See XPath Examples.

nsmgr
XmlNamespaceManager XmlNamespaceManager XmlNamespaceManager XmlNamespaceManager

XmlNamespaceManager que se utiliza para resolver los espacios de nombres de los prefijos de la expresión XPath.An XmlNamespaceManager to use for resolving namespaces for prefixes in the XPath expression.

Devoluciones

XmlNodeList que contiene una colección de nodos que coinciden con la consulta XPath.An XmlNodeList containing a collection of nodes matching the XPath query.

Excepciones

La expresión XPath contiene un prefijo que no está definido en XmlNamespaceManager.The XPath expression contains a prefix which is not defined in the XmlNamespaceManager.

Ejemplos

En el ejemplo siguiente se muestran los valores de cada uno de los atributos de ISBN.The following example displays the values of each of the ISBN attributes. En este ejemplo se usa un objeto XmlElement, que hereda de la clase 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

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

Comentarios

Las expresiones XPath pueden incluir espacios de nombres.XPath expressions can include namespaces. La resolución de espacios de nombres es compatible con XmlNamespaceManager.Namespace resolution is supported using the XmlNamespaceManager. Si la expresión XPath incluye un prefijo, el par de prefijos y URI de espacio de nombres debe agregarse al XmlNamespaceManager.If the XPath expression includes a prefix, the prefix and namespace URI pair must be added to the XmlNamespaceManager.

Nota

Si la expresión XPath no incluye un prefijo, se supone que el identificador URI de espacio de nombres es el espacio de nombres vacío.If the XPath expression does not include a prefix, it is assumed that the namespace URI is the empty namespace. Si el código XML incluye un espacio de nombres predeterminado, debe agregar un prefijo y un identificador URI de espacio de nombres al XmlNamespaceManager; de lo contrario, no recibirá ningún nodo seleccionado.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 obtener más información, vea seleccionar nodos con la navegación XPath.For more information, see Select Nodes Using XPath Navigation.

Por ejemplo, si tuviera el siguiente código XML:For example, if you had the following XML:

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

El código C# siguiente selecciona todos los nodos del libro: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);  

Nota

Un problema común al formular expresiones XPath es cómo incluir una comilla simple (') o una comilla doble (") en la expresión.A common issue when formulating XPath expressions is how to include a single quote (') or double quote (") in the expression. Si tiene que buscar un valor que incluya una comilla simple, debe escribir la cadena entre comillas dobles.If you have to search for a value that includes a single quote, you must enclose the string in double quotes. Si necesita buscar un valor que incluya comillas dobles, debe incluir la cadena entre comillas simples.If you need to search for a value that includes a double quote, you must enclose the string in single quotes.

Por ejemplo, supongamos que tiene el siguiente código XML:For example, suppose you have the following XML:

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

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

Este método es una extensión de Microsoft para el Document Object Model (DOM).This method is a Microsoft extension to the Document Object Model (DOM).

El objeto XmlNodeList devuelto por este método será válido, mientras que el documento subyacente permanece inalterado.The XmlNodeList object returned by this method will be valid while the underlying document remains unchanged. Si cambia el documento subyacente, se pueden devolver resultados inesperados (no se producirá ninguna excepción).If the underlying document changes, unexpected results may be returned (no exception will be thrown).

Consulte también:

Se aplica a