Cómo consultar XML con una expresión XPath mediante C#

Seleccione idioma Seleccione idioma
Id. de artículo: 308333 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se muestra cómo consultar un objeto XPathDocument con una expresión de XML Path Language (XPath) utilizando la clase XPathNavigator . XPath se utiliza mediante programación para evaluar expresiones y seleccionar nodos específicos de un documento.

Requisitos

En la lista siguiente se describe el hardware, el software, la infraestructura de red y los service pack recomendados que se necesitarán:
  • Visual C#
En este artículo se supone que está familiarizado con los temas siguientes:
  • Terminología de XML
  • Crear y leer un archivo XML
  • Sintaxis de XPath

Cómo consultar XML con una expresión XPath

  1. Crear una nueva aplicación de consola de Visual C# en Visual Studio.

    Nota : este ejemplo utiliza un archivo denominado Books.Xml. Puede crear su propio archivo Books.xml o puede utilizar el ejemplo que se incluye en Quickstarts en el kit de desarrollo de software (SDK) .NET. Si no tiene Quickstarts instalado y no desea instalarlo, consulte la sección "Referencias" para la ubicación de descarga del archivo Books.xml. Si tiene instalados los tutoriales, el archivo puede encontrarse en la carpeta siguiente:
    Programa Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VB
    Debe copiar el archivo en la carpeta \Bin\Debug, que se encuentra en la carpeta en la que creó este proyecto.
  2. Asegúrese de que el proyecto hace referencia el espacio de nombres System.XML .
  3. Utilice la instrucción using de los espacios de nombres XML y XPath para que no se pida calificar declaraciones en esos espacios de nombres más adelante en el código. Debe utilizar la instrucción al antes de cualquier otra declaración, como sigue:
    using System.Xml;
    using System.Xml.XPath;
    					
  4. Declare las variables apropiadas. Declare un objeto XPathDocument para mantener el documento XML, un objeto XpathNavigator para evaluar expresiones XPath y un objeto XPathNodeIterator para recorrer en iteración los nodos seleccionados. Declare un objeto String para mantener las expresiones XPath. Agregue el código de declaración de la función Main de Class1.
       XPathNavigator nav;
       XPathDocument docNav;
       XPathNodeIterator NodeIter;
       String strExpression;
    					
  5. Carga XPathDocument con el archivo de ejemplo Books.Xml. La clase XPathDocument utiliza Extensible Stylesheet Language Transformations (XSLT) para proporcionar una memoria caché rápida y orientada al rendimiento para procesar documentos XML. Es similar al modelo de objetos de documento (DOM) XML pero está muy optimizada para procesar XSLT y el modelo de datos XPath.
        // Open the XML.
        docNav = new XPathDocument(@"c:\books.xml");
    					
  6. Cree un XPathNavigator desde el documento. El objeto XPathNavigator se utiliza para consultas de XPath de sólo lectura. Las consultas XPath pueden devolver un valor resultante o muchos nodos.
         // Create a navigator to query with XPath.
         nav = docNav.CreateNavigator();
    					
  7. Crear una expresión de XPath para buscar el costo medio de un libro. Esta expresión de XPath devuelve un único valor. Para obtener detalles completos sobre la sintaxis de XPath, vea "XPath Syntax" en la sección "Referencias".
         // Find the average cost of a book.
         // This expression uses standard XPath syntax.
         strExpression = "sum(/bookstore/book/price) div count(/bookstore/book/price)";
    					
  8. Utilice el método Evaluate del objeto XPathNavigator para evaluar la expresión XPath. El método Evaluate devuelve los resultados de la expresión.
        // Use the Evaluate method to return the evaluated expression.
        Console.WriteLine("The average cost of the books are {0}", nav.Evaluate(strExpression));
  9. Crear una expresión de XPath para buscar todos los libros que cuestan más de diez dólares. Esta expresión XPath devuelve sólo los nodos de título desde el origen XML.
        // Find the title of the books that are greater then $10.00.
        strExpression = "/bookstore/book/title[../price>10.00]";
    					
  10. Cree un XPathNodeIterator para los nodos que están seleccionados con el método SELECT de XPathNavigator . XPathNodeIterator representa un conjunto de nodos XPath y por lo tanto admite operaciones en este nodeset.
        // Select the node and place the results in an iterator.
        NodeIter = nav.Select(strExpression);
  11. Utilizar el XPathNodeIterator , que se devolvió el método SELECT de XPathNavigator , para desplazarse por los nodos seleccionados. En este caso, puede utilizar el método MoveNext de XPathNodeIterator para recorrer en iteración todos los nodos seleccionados.
      Console.WriteLine("List of expensive books:");
      //Iterate through the results showing the element value.
      while (NodeIter.MoveNext())
      {
          Console.WriteLine("Book Title: {0}", NodeIter.Current.Value);
      };
    					
  12. Utilice el método ReadLine para agregar una pausa al final de la pantalla de consola para mostrar más fácilmente los resultados anteriores.
        // Pause
        Console.ReadLine();
    					
  13. Construya y ejecute su proyecto. Tenga en cuenta que los resultados se muestran en la ventana de consola.

Solución de problemas

Cuando pruebe el código quizás aparezca el mensaje de error de excepción siguiente:
Excepción no controlada del tipo 'System.Xml.XmlException' en system.xml.dll

Obtener información adicional: error del sistema.
El error de excepción se produce en la siguiente línea de código:
docNav = new XPathDocument("c:\\books.xml");
				
el error de excepción está causado por una instrucción de procesamiento no válida. Por ejemplo, la instrucción de procesamiento puede contener espacios extraños. El siguiente es un ejemplo de una instrucción de procesamiento no válida:
<?xml version='1.0' ?>
para resolver la excepción, siga uno de los siguientes:
  • Corrija la instrucción de procesamiento no válida. El siguiente es un ejemplo de una instrucción de procesamiento válida:
    <?xml version='1.0'?>
    - OR -
  • Quite la instrucción de procesamiento XML del archivo Books.xml.

Referencias

El archivo siguiente está disponible para descargarlo del Centro de descarga de Microsoft:
Contraer esta imagenAmpliar esta imagen
Download
Download Books.xml now
Para obtener más información, visite los siguientes sitios Web de Microsoft (pueden estar en inglés):
XML en. NET: .NET Framework XML Classes and C# Offer manipulación de datos simple y escalable
http://msdn.microsoft.com/msdnmag/issues/01/01/xml/default.aspx

Clase XPathNavigator
http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator.aspx

Clase XPathDocument
http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathdocument.aspx

Clase XPathNodeIterator
http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnodeiterator.aspx

Transformaciones XSLT con la clase XslTransform
http://msdn.microsoft.com/en-us/library/47yh29a9.aspx

Sintaxis de XPath
http://msdn2.microsoft.com/en-us/library/ms763742.aspx
Para obtener más información acerca de XPath, visite el siguiente sitio Web de World Wide Web Consortium (W3C):
XML Path Language (XPath)
Versión 1.0: Recomendación del W3C 16 de noviembre de 1999
http://www.w3.org/TR/1999/REC-xpath-19991116

Propiedades

Id. de artículo: 308333 - Última revisión: jueves, 13 de marzo de 2008 - Versión: 7.2
La información de este artículo se refiere a:
  • Microsoft ADO.NET 1.0
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Palabras clave: 
kbmt kbdownload kbhowtomaster KB308333 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 308333

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com