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

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

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

Resumen

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

Este artículo hace referencia al espacio de nombres .NET Framework biblioteca de clases de Microsoft System.Xml.XPath .

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 XPath

XML de consulta 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 denominadoBooks.xml. Puede crear su propio archivo 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 los inicios rápidos instalados y no desea instalarlos, consulte la sección Referencias para la ubicación de descarga Books.xml inicios rápidos. Si tiene los inicios rápidos instalados, el archivo se puede encontrar en la Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VB carpeta. Puede copiar el archivo en la carpeta, que se encuentra debajo de la carpeta en la \Bin\Debug que creó este proyecto.
  2. Asegúrese de que el proyecto hace referencia al espacio de System.Xml nombres.

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

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

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

    // Open the XML.
    docNav = new XPathDocument(@"c:\books.xml");
    
  6. Cree una 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 promedio de un libro. Esta expresión XPath devuelve un solo valor. Para obtener información completa sobre la sintaxis de XPath, consulte 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. Use el Evaluate método del objeto para evaluar la expresión XPathNavigator 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 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 una XPathNodeIterator para los nodos seleccionados con el método Select XPathNavigator . Representa XPathNodeIterator 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. Utilice el XPathNodeIterator valor , que se ha devuelto desde el método de , para Select XPathNavigator desplazarse por los nodos seleccionados. En este caso, puede usar el método MoveNext de XPathNodeIterator la para iterar por 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 método para agregar una pausa al final de la pantalla de la consola para mostrar ReadLine más fácilmente los resultados anteriores.

    // Pause
    Console.ReadLine();
    
  13. Cree 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:

Una 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 extraneosos. El siguiente ejemplo 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 siguiente ejemplo es una instrucción de procesamiento válida:

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

Referencias