Introducción a XPath e XSLT

De Wiki do Ciclo ASIR do IES de Rodeira
Saltar á navegación Saltar á procura

Introducción

A finalidade de XSLT (eXtensible Stylesheet Language Transformations) e a conversión de documentos XML en novos documentos XML. O procesador XSLT aplicará as regras indicadas no documento XSLT sobre o documento XML producindo un novo documento XML.

O análise do arquivo XML realízase empregando expresións de busca e selección no documento XML mediante a linguaxe XPath, aplicando posteriormente a transformación indicada.

XPath

XPath é unha linguaxe empregada para a creación de expresións que permitan percorrer e seleccionar elementos nun documento XML. As expresións XPath traballan dun xeito similar ás expresións utilizadas para referirnos a arquivos dentro do sistema de ficheiros.

As expresións XPath poden:

  • Seleccionar un nodo ou unha secuencia de nodos
  • Devolver un valor verdadeiro/falso
  • Devolver un número
  • Devolver unha cadea de Caracteres.

XPath dispón de moitas funcións para manexo de cadeas de caracteres, números e comparación de datas e de tempo, manipulación de nodos, … etc.

Para comprender as expresións XPath é imprescindible o manexo da terminoloxía básica:

Nodos

Cada etiqueta XML é un nodo. O nodo raíz, chámase tamén nodo contexto. As expresións XPath teñen como misión a selección de nodoso ou atributos. Os nodos seleccionados por unha expresión XPath denomínanse nodos actuais.

Atributos

Os atributos XML son características do nodo que se indican dentro da propia etiqueta XML e en XPath se indica a súa selección antepoñendo o caracter @.

Ruta ou Camiño XPath

Un camiño XPath permite acceder a unha posición concreta dun documento XML. As rutas XPath teñen a seguinte forma:

 camiño::testDeNodo[predicado] 

O camiño permite seleccionar un nodo ou conxunto de nodos, mentras que o testDeNodo xunto co predicado permiten filtrar eses nodos para obter únicamente os resultados desexados, sendo habitualmente testDeNodo o nome dos nodos que queremos seleccionar.

Os camiños constan de un ou varios eixos separados polo caracter /.

Eixos

Un eixo indica relación entre nodos. Un camiño XPath consiste en un ou varios eixos separados por /. As relacións poden ser:

  • child (fillos)
  • descendant (descendente)
  • parent (pai)
  • ancestor (antecesor)
  • following-sibling (irmán seguinte)
  • preceding-sibling (irmán anterior)
  • following (todos os nodos que siguen ao actual)
  • preceding (todos os nodos precedentes)
  • attribute (Selecciona o atributo do nodo contexto)
  • namespace (Selecciona os nodos do mesmo espacio de nomes do nodo contexto)
  • self (Selecciona o nodo contexto)
  • descendant-or-self (Selecciona o nodo contexto e os seus descendentes)
  • ancestor-or-self (Selecciona o nodo contexto e os seus ascendentes)

Tamén poden formar parte dun eixo os nomes do nodo seleccionados a partir do nodo actual.

testDeNodo

Os testDeNodo son normalmente o nome do nodo que queremos seleccionar. Por exemplo, /descendant::libro seleccionará todos os nodos libro que descenden do nodo raíz.

predicado

O predicado nos permite filtrar os nodos seleccionados polo eixo e o testDeNodo. Normalmente se utilizan expresións que devolven verdadeiro ou falso segundo o nodo se selecciona ou non. Estas expresións poden empregar:

Operadores lóxicos
and, or, =, !=, <, >, <=, >=
Operadores aritméticos
+, -, *, div
Funcións
last(), position(), count(), id(), starts-width(), contains(), substring-before(), substring-after(), substring(), string-length(), name(), text(), sum(), ceiling(), floor(), round()


Os eixos se poden abreviar do seguinte xeito:

 .       self::
 ..      parent::
 @       attribute::
 .//     descendant-or-self/node()/
 //      /descendant-or-self/node()/
 *       all child elements of the context node
 @*      all attributes of the context node
 [n]     [position() = n]


XSLT

Vexamos un exemplo:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
 <body>
 <h2>My CD Collection</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Title</th>
        <th>Artist</th>
      </tr>
      <xsl:for-each select="catalog/cd">
        <tr>
          <td><xsl:value-of select="title"/></td>
          <td><xsl:value-of select="artist"/></td>
        </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>
	O exemplo anterior creará unha táboa en formato HTML a partir dun documento XML describindo información de unha discoteca.
	Os ficheiros XSLT normalmente se gardan con extensión .xsl, e son procesados de xeito automatico polos navegadores web modernos cando van ligados na cabeceira dun documento XML. A ligazón realízase do seguinte xeito:
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
	O procesamento da folla de estilos XSLT se realiza mediante plantillas (templates) que se aplican de xeito secuencial sobre a parte da árbore XML seleccionada mediante a etiqueta <xsl:template match='seleccion'>. Dentro de cada plantilla se dispón de varias operacións xsl, sendo as máis importantes as seguintes:
<xsl:value-of select='expresion XPath'/>
	Coloca o resultado da avaliación da expresión XPath
<xsl:for-each select='expresion XPath'>......</xsl:for-each>
	Recorre os nodos que satisfagan a expresión XPath
<xsl:sort select='expresion XPath'/>
	Sempre vai dentro de un xsl:for-each ou un apply-templates, e ordea o recorrido polo indicado na expresión XPath
<xsl:if test='expresion'>....</xsl:if>
	Leva a cabo a sustitución indicada no interior do if, sempre que se cumpla a expresión.
<xsl:variable name='nome' select='expresion XPath'/>
	o resultado da expresión XPath estará dispoñible posteriormente coa referencia $nome.