Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe cómo consultar un XPathDocument objeto mediante una expresión de lenguaje de ruta de acceso XML (XPath) y la XPathNavigator clase .
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 de la biblioteca de clases de Microsoft .NET Framework, System.Xml.XPath.
Se aplica a: Visual Studio, .NET Framework
Número de KB original: 308333
Prerrequisitos
En este artículo se da por supuesto que está familiarizado con los temas siguientes:
- Visual C#
- Terminología XML
- Creación y lectura de un archivo XML
- Sintaxis XPath
Consulta un XPathDocument que contiene una expresión XPath
En Microsoft Visual Studio, cree una aplicación de consola de Visual C#.
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 "Contenido relacionado" para la ubicación de descarga de Books.xml.
Si tiene instalados los inicios rápidos, el archivo Books.xml se puede encontrar en la
Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transforxml\VBcarpeta . Puede copiar el archivo en la\Bin\Debugsubcarpeta de la carpeta en la que creó este proyecto.Asegúrese de que el proyecto hace referencia al
System.Xmlespacio de nombres.Use la
usinginstrucción en losXmlespacios de nombres yXPathpara que no sea necesario calificar las declaraciones en esos espacios de nombres más adelante en el código. Puede usar lausinginstrucció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
XPathDocumentobjeto para contener el documento XML, unXpathNavigatorobjeto para evaluar expresiones XPath y unXPathNodeIteratorobjeto para recorrer en iteración los nodos seleccionados. Declare unStringobjeto para contener las expresiones XPath. Agregue el código de declaración a laMainfunción enClass1.XPathNavigator nav; XPathDocument docNav; XPathNodeIterator NodeIter; String strExpression;Cargue un
XPathDocumentjunto con el archivo de ejemplo, Books.xml. LaXPathDocumentclase 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 XML (DOM), pero está altamente optimizado para el procesamiento XSLT y elXPathmodelo de datos.// Open the XML. docNav = new XPathDocument(@"c:\books.xml");Cree un
XPathNavigatorelemento a 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 encontrar el costo medio de un libro. Esta expresión XPath devuelve un valor único. Para obtener información completa sobre la sintaxis XPath, vea Sintaxis 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
Evaluatemétodo delXPathNavigatorobjeto para evaluar la expresión XPath. 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 encontrar 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
XPathNodeIteratorpara los nodos seleccionados junto con el métodoSelectdeXPathNavigator.XPathNodeIteratorrepresenta 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);Para desplazarse por los nodos seleccionados, use el
XPathNodeIteratorque se devolvió desde elSelectmétodo deXPathNavigator. En este caso, puede usar elMoveNextmétodo deXPathNodeIteratorpara 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
ReadLinemétodo para agregar una pausa al final de la pantalla de la consola para mostrar más fácilmente los resultados de los pasos 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, es posible que reciba el siguiente mensaje de error de excepción:
An unhandled exception of type System.Xml.XmlException occurred in System.xml.dll
Additional information: System error.
Esta excepción se produce en la siguiente línea de código:
docNav = new XPathDocument("c:\\books.xml");
El error se debe a una instrucción de procesamiento no válida. Por ejemplo, la instrucción de procesamiento podría 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.
Contenido relacionado
- Descargar Books.xml
- XPathDocument (clase)
- Sintaxis XPath