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
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\VBcarpeta. Puede copiar el archivo en la carpeta, que se encuentra debajo de la carpeta en la\Bin\Debugque creó este proyecto.
- 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
Asegúrese de que el proyecto hace referencia al espacio de
System.Xmlnombres.Use la instrucción en los espacios de nombres and para que no sea necesario calificar declaraciones en esos espacios de nombres
usingmás adelante en elXmlXPathcódigo. Puede usar la instrucciónusingantes de cualquier otra declaración, como se muestra a continuación:using System.Xml; using System.Xml.XPath;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
XPathDocumentXpathNavigatorde los nodosXPathNodeIteratorseleccionados. Declare unStringobjeto para contener las expresiones XPath. Agregue el código de declaración enMainla funciónClass1.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;Cargue una
XPathDocumentcon 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 rendimientoXPathDocumentpara el procesamiento de documentos XML. Es similar al modelo de objetos de documento XML (DOM), pero está altamente optimizado para el procesamiento XSLT y elXPathmodelo de datos.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");Cree una
XPathNavigatora partir del documento. ElXPathNavigatorobjeto 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 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)";Use el
Evaluatemétodo del objeto para evaluar la expresiónXPathNavigatorXPath. ElEvaluatemé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 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 una
XPathNodeIteratorpara los nodos seleccionados con el métodoSelectXPathNavigator. RepresentaXPathNodeIteratorun 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);Utilice el
XPathNodeIteratorvalor , que se ha devuelto desde el método de , paraSelectXPathNavigatordesplazarse por los nodos seleccionados. En este caso, puede usar el métodoMoveNextdeXPathNodeIteratorla 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); };Use el método para agregar una pausa al final de la pantalla de la consola para mostrar
ReadLinemás fácilmente los resultados anteriores.// Pause Console.ReadLine();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.