XSLT (II): Descubriendo XPath

Hace unos días escribí un artículo sobre XSLT a modo de introducción sobre esta tecnología. El artículo era muy simple, ya que solo pretendía mostrarse como introducción y mostrar lo que, en sí, el sistema XSLT puede llegar a hacer.

Ahora, vamos a completar un poco más esa visión adentrándonos en el uso de XPath.

¿Qué es XPath?

Esta tecnología es usada en XML para poder navegar entre las etiquetas, los atributos y el contenido de las mismas. A decir verdad, si nos fijamos bien en el sistema de etiquetas XML, y tomamos el texto libre como si fuese una etiqueta de texto, podemos ver la forma jerárquica en la que XML se forma y se combina, de modo que puede ser representado, sin pérdida de información, en un formato de árbol.

XPath, en su forma más simple, se puede definir como una representación de ruta textual, para acceder a un elemento en concreto de ese árbol que conforma un documento XML.

Por ello, si tenemos el documento:

<comidas>
    <plato>
        <nombre>Salmorejo</nombre>
        <origen>Córdoba</origen>
    </plato>
    <plato>
        <nombre>Callos</nombre>
        <origen>Madrid</origen>
    </plato>
</comidas>

Para acceder a los nombres de las comidas, tan solo habría que indicar que se quiere rescatar todo lo que estén en la siguiente ruta:

/comidas/plato/nombre

Condiciones

Como se ha visto en el ejemplo anterior, un documento XML puede tener muchas rutas repetidas, a diferencia de un sistema de ficheros, que tiene directorios y ficheros, pero con un nombre único (por nivel) cada uno. A este respecto, XPath también da la posibilidad de identificar elementos concretos para poder rescatarlos de forma unívoca, por ejemplo, en el documento XML ya visto, si se quiere rescatar el origen del plato, cuyo nombre es Córdoba:

/comidas/plato[nombre = 'Cordoba']/origen

Todo código que va entre corchetes indica condiciones. En este caso, dentro de comidas, solo se extraen las etiquetas de tipo plato que cumplan con la condición marcada, y solo el contenido de la etiqueta origen.

Claves unívocas

En la mayoría de documentos XML se asigna un atributo llamado id a las etiquetas para que la extracción sea realmente unívoca, entendiendo que cada etiqueta del documento no puede tener ese dato repetido. Sería unívoco con respecto al documento completo. En el caso anterior, cambiando la forma del documento:

<comidas>
    <plato id="1">
        <nombre>Salmorejo</nombre>
        <origen>Córdoba</origen>
    </plato>
    <plato id="2">
        <nombre>Callos</nombre>
        <origen>Madrid</origen>
    </plato>
</comidas>

La condición para extraer el plato cuyo identificador es el 1, sería de la siguiente forma:

/comidas/plato[@id = '1']/nombre

Para diferenciar entre atributo y etiqueta hija, se usa la arroba (@). Este símbolo le dice a XPath que id no es una etiqueta hija, sino un atributo.

Conclusiones

Como en el artículo anterior, esto es otra introducción a una tecnología de la que habría para escribir un libro. Intento mostrar de forma clara y breve la tecnología en sí, su uso y algún ejemplo que permita una rápida entrada en la misma. Seguiremos indagando en la tecnología en sí y en sus usos en lo sucesivo.