jueves, 24 de marzo de 2016

Receta C# No. 6-6: Cómo Usar XPath para Encontrar Elementos

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 XPath
5.2 Método SelectNodes
5.3 Método SelectSingleNode
6. Práctica: Uso de XPath para Búsqueda de Nombres de Ítems en una Orden
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

En recetas C# anteriores se ha demostrado cómo usar mecanismos básicos para la búsqueda de elementos en un documento XML. Uno de esos mecanismos consiste en el uso del método GetElementsByTagName: a pesar de su versatilidad y uso intuitivo, su nivel de granularidad para búsquedas más específicas no resulta apto. Como se estudia y explica en esta receta, existe un mecanismo de búsqueda más sofisticado, que cuenta con una sintaxis más flexible y poderosa en la búsqueda de datos y características de un documento XML: XPath.

2. Palabras Clave

  • Documento XML
  • XML
  • XPath

3. Problema

Recurrir a un mecanismo de búsqueda alternativo que provea una sintaxis de criterios búsqueda avanzados.

4. Solución

A través del uso de XPath es posible escribir criterios de búsqueda avanzados. Los métodos SelectNodes y SelectSingleNode de la System.XmlDocument permiten la especificación de expresiones XPath para encontrar elementos en un documento XML.

5. Discusión de la Solución

5.1 XPath

XPath ("XPath Tutorial", 2016) -o XML Path Language- es un mecanismo de navegación y consulta sobre los elementos y atributos definidos en la estructura de un documento XML.

Este mecanismo de búsqueda/navegación cuenta con una sintaxis expresiva y simple para la especificación de criterios de búsqued avanzados. También cuenta con funciones (alrededor de 100) para manipular valores de cadenas de caracteres, valores numéricos, comparación de fechas y hora, manipulación de nodos, valores booleanos, entre otras más.

Suponiendo que se cuenta con la siguiente estructura definida en un documento XML:

<a>
<b>
<c/>
</b>
</a>

La consulta para la selección, por ejemplo del nodo c, sería 

/a/b/c

Nótese que la sintaxis para esta consulta se puede leer como si se tratara de una ruta de directorios en un sistema de archivos.

Otro ejemplo básico podría consistir en la selección de todos los sub-nodos de a:

/a/*

[Nota: Una introducción más amplia de este lenguaje es posible, sin embargo para efectos de brevedad y concretitud de esta receta, sólo se menciona su funcionalidad y principios básicos.]

5.2 Método SelectNodes


El método sobrecargado SelectNodes ("XmlDocument.SelectNodes Method", 2016) selecciona una lista de nodos que cumplan con el criterio de búsqueda especificado por una expresión XPath. La versiones sobrecargadas de este método se enlistan en la Figura 1 ("XmlDocument.SelectNodes Method").
Métodos sobrecargados de SelectNodes
Figura 1. Métodos sobrecargados de SelectNodes ("XmlDocument.SelectNodes Method", 2016).
La versión básica de este método admite un argumento de tipo string para representar la cadena de caracteres de la expresión XPath:

public XmlNodeList SelectNodes(string xpath)

5.3 Método SelectSingleNode

Con SelectSingleNode se selecciona el primer nodo que cumpla con un criterio de búsqueda XPath. Este método cuenta con dos versiones sobrecargadas presentadas en la Figura 2.
Métodos sobrecargados de SelectSingleNode
Figura 2. Métodos sobrecargados de SelectSingleNode ("XmlDocument.SelectSingleNode Method", 2016).

6. Práctica: Uso de XPath para Búsquedas de Nombre de Ítems en una Orden

En este ejemplo se creará una aplicación de consola para la búsqueda de los nombres de los ítems de una orden de compra representados en un documento XML.

En este documento XML está representada la información de una orden de compra que incluye además:
  • El nombre del cliente
  • Los ítems comprados.
En las líneas 13-14 se carga el documento XML Ordenes.xml en la memoria principal del sistema. En la línea 18 se invoca el método SelectNodes para especificar la expresión XPath de búsqueda de los nombres de los ítems de la orden de compra:

"/Orden/Items/Item/Nombre"


Con el ciclo foreach de las líneas 21-24 se recorre la lista de nodos con los resultados de la búsqueda.


Compilación:

csc /t:exe BusquedaXPath.cs


Ejecución assembly:

.\BusquedaXPath.exe


Demostración ejecución (local):
Ejecución assembly BusquedaXPath.exe
Figura 3. Ejecución assembly BusquedaXPath.exe.

7. Conclusiones

Con XPath el programador puede especificar criterios de búsqueda avanzados. Este mecanismo de búsqueda facilita la exploración del contenido de un documento XML usando una sintaxis simple pero poderosa. En la sección práctica se usó el método SelectNodes para especificar una cadena de caracteres con la expresión de búsqueda los nombres de los ítems de una orden de compra.

La próxima receta consistirá en la lectura y escritura de XML sin cargar el documento entero en la memoria de trabajo.

8. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.
XPath Tutorial (2016, marzo 24). Recuperado desde: http://www.w3schools.com/xsl/xpath_intro.asp
XPath (2016, marzo 24). Recuperado desde: https://en.wikipedia.org/wiki/XPath
XmlDocument.SelectNodes Method (System.Xml) (2016, marzo 24). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.xml.xmldocument.selectnodes%28v=vs.110%29.aspx


V

1 comentario:

  1. alguien me puede ayudar con un ejemplo xpach que me traiga el elemento para selenium java,

    ResponderEliminar

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.