XmlNode.SelectSingleNode XmlNode.SelectSingleNode XmlNode.SelectSingleNode XmlNode.SelectSingleNode Method

Definición

Selecciona el primer XmlNode que coincide con la expresión XPath.Selects the first XmlNode that matches the XPath expression.

Sobrecargas

SelectSingleNode(String) SelectSingleNode(String) SelectSingleNode(String) SelectSingleNode(String)

Selecciona el primer XmlNode que coincide con la expresión XPath.Selects the first XmlNode that matches the XPath expression.

SelectSingleNode(String, XmlNamespaceManager) SelectSingleNode(String, XmlNamespaceManager) SelectSingleNode(String, XmlNamespaceManager) SelectSingleNode(String, XmlNamespaceManager)

Selecciona el primer XmlNode que coincide con la expresión XPath.Selects the first XmlNode that matches 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.

Ejemplos

En el ejemplo siguiente se devuelve el primer libro con el nombre de autor correspondiente.The following example returns the first book with the matching author name. XmlNamespaceManager resuelve el espacio de nombres predeterminado en la expresión XPath.The XmlNamespaceManager resolves the default namespace in the XPath expression.

#using <System.Xml.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
int main()
{
   XmlDocument^ doc = gcnew XmlDocument;
   doc->Load( L"newbooks.xml" );
   
   // Create an XmlNamespaceManager to resolve the default namespace.
   XmlNamespaceManager^ nsmgr = gcnew XmlNamespaceManager( doc->NameTable );
   nsmgr->AddNamespace( L"bk", L"urn:newbooks-schema" );
   
   // Select the first book written by an author whose last name is Atwood.
   XmlNode^ book;
   XmlElement^ root = doc->DocumentElement;
   book = root->SelectSingleNode( L"descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr );
   Console::WriteLine( book->OuterXml );
   return 0;
}

using System;
using System.IO;
using System.Xml;

public class Sample
{
  public static void Main()
  {

      XmlDocument doc = new XmlDocument();
      doc.Load("newbooks.xml");

      // Create an XmlNamespaceManager to resolve the default namespace.
      XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
      nsmgr.AddNamespace("bk", "urn:newbooks-schema");

      // Select the first book written by an author whose last name is Atwood.
      XmlNode book;
      XmlElement root = doc.DocumentElement;
     book = root.SelectSingleNode("descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr);

      Console.WriteLine(book.OuterXml);

  }
}
Imports System.IO
Imports System.Xml

Public Class Sample

  Public Shared Sub Main()

      Dim doc As XmlDocument = New XmlDocument()
      doc.Load("newbooks.xml")

      'Create an XmlNamespaceManager for resolving namespaces.
      Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
      nsmgr.AddNamespace("bk", "urn:newbooks-schema")

      'Select the book written by an author whose last name is Atwood.
      Dim book As XmlNode 
      Dim root As XmlElement = doc.DocumentElement
      book = root.SelectSingleNode("descendant::bk:book[bk:author/bk:last-name='Atwood']", nsmgr)

      Console.WriteLine(book.OuterXml)

  End Sub
End Class

En el ejemplo se usa el archivo, newbooks.xml, como entrada.The example uses the file, newbooks.xml, as input.

<?xml version='1.0'?>
<bookstore xmlns="urn:newbooks-schema">
  <book genre="novel" style="hardcover">
    <title>The Handmaid's Tale</title>
    <author>
      <first-name>Margaret</first-name>
      <last-name>Atwood</last-name>
    </author>
    <price>19.95</price>
  </book>
  <book genre="novel" style="other">
    <title>The Poisonwood Bible</title>
    <author>
      <first-name>Barbara</first-name>
      <last-name>Kingsolver</last-name>
    </author>
    <price>11.99</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.

SelectSingleNode(String) SelectSingleNode(String) SelectSingleNode(String) SelectSingleNode(String)

Selecciona el primer XmlNode que coincide con la expresión XPath.Selects the first XmlNode that matches the XPath expression.

public:
 System::Xml::XmlNode ^ SelectSingleNode(System::String ^ xpath);
public System.Xml.XmlNode SelectSingleNode (string xpath);
member this.SelectSingleNode : string -> System.Xml.XmlNode
Public Function SelectSingleNode (xpath As String) As XmlNode

Parámetros

xpath
String String String String

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

Devoluciones

Primer XmlNode que coincide con la consulta XPath o null si no se encuentra un nodo coincidente.The first XmlNode that matches the XPath query or null if no matching node is found.

Excepciones

La expresión XPath contiene un prefijo.The XPath expression contains a prefix.

Ejemplos

En el ejemplo siguiente se cambia el precio del primer libro de Julia Austen.The following example changes the price of the first Jane Austen book.

#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" );
   XmlNode^ book;
   XmlNode^ root = doc->DocumentElement;
   book = root->SelectSingleNode( "descendant::book[author/last-name='Austen']" );
   
   //Change the price on the book.
   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");

    XmlNode book;
    XmlNode root = doc.DocumentElement;

    book=root.SelectSingleNode("descendant::book[author/last-name='Austen']");
 
    //Change the price on the book.
    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 root as XmlNode = doc.DocumentElement

    book=root.SelectSingleNode("descendant::book[author/last-name='Austen']")
 
    'Change the price on the book.
    book.LastChild.InnerText="15.95"

    Console.WriteLine("Display the modified XML document....")
    doc.Save(Console.Out)
    
  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

Si la expresión XPath requiere la resolución de espacios de nombres, debe usar la sobrecarga SelectSingleNode que toma XmlNamespaceManager como argumento.If the XPath expression requires namespace resolution, you must use the SelectSingleNode 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 obtendrá un 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 a selected node. 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:

book = root.SelectSingleNode("descendant::book[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).

Consulte también:

SelectSingleNode(String, XmlNamespaceManager) SelectSingleNode(String, XmlNamespaceManager) SelectSingleNode(String, XmlNamespaceManager) SelectSingleNode(String, XmlNamespaceManager)

Selecciona el primer XmlNode que coincide con la expresión XPath.Selects the first XmlNode that matches 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::XmlNode ^ SelectSingleNode(System::String ^ xpath, System::Xml::XmlNamespaceManager ^ nsmgr);
public System.Xml.XmlNode SelectSingleNode (string xpath, System.Xml.XmlNamespaceManager nsmgr);
member this.SelectSingleNode : string * System.Xml.XmlNamespaceManager -> System.Xml.XmlNode
Public Function SelectSingleNode (xpath As String, nsmgr As XmlNamespaceManager) As XmlNode

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

Primer XmlNode que coincide con la consulta XPath o null si no se encuentra un nodo coincidente.The first XmlNode that matches the XPath query or null if no matching node is found.

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 selecciona el libro con el valor de ISBN coincidente.The following example selects the book with the matching ISBN value.

#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" );
   
   //Create an XmlNamespaceManager for resolving namespaces.
   XmlNamespaceManager^ nsmgr = gcnew XmlNamespaceManager( doc->NameTable );
   nsmgr->AddNamespace( "bk", "urn:samples" );
   
   //Select the book node with the matching attribute value.
   XmlNode^ book;
   XmlElement^ root = doc->DocumentElement;
   book = root->SelectSingleNode( "descendant::book->Item[@bk:ISBN='1-861001-57-6']", nsmgr );
   Console::WriteLine( book->OuterXml );
}

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 the book node with the matching attribute value.
      XmlNode book;
      XmlElement root = doc.DocumentElement;
      book = root.SelectSingleNode("descendant::book[@bk:ISBN='1-861001-57-6']", nsmgr);

      Console.WriteLine(book.OuterXml);

  }
}
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 the book node with the matching attribute value.
      Dim book as XmlNode 
      Dim root as XmlElement = doc.DocumentElement
      book = root.SelectSingleNode("descendant::book[@bk:ISBN='1-861001-57-6']", nsmgr)

      Console.WriteLine(book.OuterXml)

  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 se obtiene 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 a node 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 el primer nodo de libro:The following C# code selects the first book node:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);  
nsmgr.AddNamespace("ab", "http://www.lucernepublishing.com");  
XmlNode book = doc.SelectSingleNode("//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")  
book = root.SelectSingleNode("descendant::ab:book[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).

Consulte también:

Se aplica a