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.XPath
biblioteca 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
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.
- 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
Asegúrese de que el proyecto hace referencia al espacio de
System.Xml
nombres.Use la
using
instrucción en losXml
espacios de nombres yXPath
para que no sea necesario calificar las declaraciones en esos espacios de nombres más adelante en el código. Puede usar lausing
instrucción antes de cualquier otra declaración, como se indica a continuación:using System.Xml; using System.Xml.XPath;
Declare las variables adecuadas. Declare un
XPathDocument
objeto para contener el documento XML, unXpathNavigator
objeto para evaluar expresiones XPath y unXPathNodeIterator
objeto para recorrer en iteración los nodos seleccionados. Declare unString
objeto para contener las expresiones XPath. Agregue el código de declaración en laMain
función enClass1
.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;
Cargue con
XPathDocument
el archivo de ejemplo Books.xml. LaXPathDocument
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 deXPath
datos.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");
Cree un
XPathNavigator
a partir del documento. ElXPathNavigator
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();
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)";
Use el
Evaluate
método delXPathNavigator
objeto para evaluar la expresión XPath. ElEvaluate
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));
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]";
Cree un
XPathNodeIterator
para los nodos seleccionados con elSelect
método deXPathNavigator
.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);
Use ,
XPathNodeIterator
que se devolvió delSelect
método deXPathNavigator
, para desplazarse por los nodos seleccionados. En este caso, puede usar elMoveNext
método deXPathNodeIterator
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); };
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();
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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de