Uso de Visual C# para consultar XML con una expresión XPath

En este artículo se presenta cómo consultar un XPathDocument objeto con una expresión de lenguaje de ruta de acceso XML (XPath) mediante la XPathNavigator clase .

Versión original del producto: Visual Studio, .NET Framework
Número de KB original: 308333

Resumen

XPath se usa mediante programación para evaluar expresiones y seleccionar nodos específicos en un documento.

En este artículo se hace referencia al espacio de nombres System.Xml.XPathbiblioteca de clases de Microsoft .NET Framework .

En este artículo se supone que está familiarizado con los temas siguientes:

  • Visual C#
  • Terminología XML
  • Creación y lectura de un archivo XML
  • Sintaxis de XPath

Consulta de XML con una expresión XPath

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

    Nota:

    • En este ejemplo se usa un archivo denominado Books.xml. Puede crear su propio archivo de Books.xml o puede usar el ejemplo que se incluye con los inicios rápidos del Kit de desarrollo de software (SDK) de .NET. Si no tiene instalados los inicios rápidos y no quiere instalarlos, consulte la sección Referencias de la ubicación de Books.xml descarga. Si tiene instalados los inicios rápidos, el archivo se puede encontrar en Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB la carpeta . Puede copiar el archivo en la \Bin\Debug carpeta , que se encuentra en la carpeta en la que creó este proyecto.
  2. Asegúrese de que el proyecto hace referencia al espacio de System.Xml nombres.

  3. Use la using instrucción en los Xml espacios de nombres y XPath para que no sea necesario calificar las declaraciones en esos espacios de nombres más adelante en el código. Puede usar la using instrucción antes de cualquier otra declaración, como se indica a continuación:

    using System.Xml;
    using System.Xml.XPath;
    
  4. Declare las variables adecuadas. Declare un XPathDocument objeto para contener el documento XML, un XpathNavigator objeto para evaluar expresiones XPath y un XPathNodeIterator objeto para recorrer en iteración los nodos seleccionados. Declare un String objeto para contener las expresiones XPath. Agregue el código de declaración en la Main función en Class1.

    XPathNavigator nav;
    XPathDocument docNav;
    XPathNodeIterator NodeIter;
    String strExpression;
    
  5. Cargue con XPathDocument el archivo de ejemplo Books.xml. La XPathDocument clase usa transformaciones de lenguaje de hoja de estilos extensibles (XSLT) para proporcionar una caché rápida y orientada al rendimiento para el procesamiento de documentos XML. Es similar al modelo de objetos de documento (DOM) XML, pero está altamente optimizado para el procesamiento XSLT y el modelo de XPath datos.

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Cree un XPathNavigator a partir del documento. El XPathNavigator objeto se usa para consultas XPath de solo lectura. Las consultas XPath pueden devolver un valor resultante o muchos nodos.

    // Create a navigator to query with XPath.
    nav = docNav.CreateNavigator();
    
  7. Cree una expresión XPath para buscar el costo medio de un libro. Esta expresión XPath devuelve un valor único. Para obtener detalles completos sobre la sintaxis de XPath, consulte Sintaxis de XPath 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. Use el Evaluate método del XPathNavigator objeto para evaluar la expresión XPath. El Evaluate método 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. Cree una expresión XPath para buscar todos los libros que cuestan más de 10 dólares. Esta expresión XPath devuelve solo los nodos Title del 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 seleccionados con el Select método de XPathNavigator. XPathNodeIterator representa un conjunto de nodos XPath y admite operaciones en este conjunto de nodos.

    // Select the node and place the results in an iterator.
    NodeIter = nav.Select(strExpression);
    
  11. Use , XPathNodeIteratorque se devolvió del Select método de XPathNavigator, para desplazarse por los nodos seleccionados. En este caso, puede usar el MoveNext método 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. Use el ReadLine método para agregar una pausa al final de la pantalla de la consola para mostrar más fácilmente los resultados anteriores.

    // Pause
    Console.ReadLine();
    
  13. Compile y ejecute el proyecto.

    Nota:

    Los resultados se muestran en la ventana de la consola.

Solución de problemas

Al probar el código, puede recibir el siguiente mensaje de error de excepción:

Excepción no controlada del tipo System.Xml. XmlException se produjo en System.xml.dll
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 se debe a una instrucción de procesamiento no válida. Por ejemplo, la instrucción de procesamiento puede contener espacios extraños. El ejemplo siguiente es una instrucción de procesamiento no válida:

<?xml version='1.0' ?>

Para resolver la excepción, use una de las siguientes resoluciones:

  • Corrija la instrucción de procesamiento no válida. El ejemplo siguiente es una instrucción de procesamiento válida:

    <?xml version='1.0'?>
    
  • Quite la instrucción de procesamiento XML del archivo Books.xml.

Referencias