Introducción a XPath e XSLT: Diferenzas entre revisións
(→Nodos) |
(→XSLT) |
||
(Non se amosan 14 revisións do historial feitas polo mesmo usuario.) | |||
Liña 28: | Liña 28: | ||
camiño::testDeNodo[predicado] |
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. |
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 '''/'''. |
Os '''''camiños''''' constan de un ou varios '''eixos''' separados polo caracter '''/'''. |
||
== Eixos == |
=== 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: |
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) |
*'''child''' (fillos) |
||
*'''descendant''' (descendente) |
*'''descendant''' (descendente) |
||
*'''parent''' (pai) |
*'''parent''' (pai) |
||
*'''ancestor''' (antecesor) |
*'''ancestor''' (antecesor) |
||
*'''following-sibling''' (irmán seguinte) |
*'''following-sibling''' (irmán seguinte) |
||
Liña 43: | Liña 43: | ||
*'''following''' (todos os nodos que siguen ao actual) |
*'''following''' (todos os nodos que siguen ao actual) |
||
*'''preceding''' (todos os nodos precedentes) |
*'''preceding''' (todos os nodos precedentes) |
||
*'''attribute''' (Selecciona o atributo do nodo contexto) |
*'''attribute''' (Selecciona o atributo do nodo contexto) |
||
*'''namespace''' (Selecciona os nodos do mesmo espacio de nomes do nodo contexto) |
*'''namespace''' (Selecciona os nodos do mesmo espacio de nomes do nodo contexto) |
||
*'''self''' (Selecciona o nodo contexto) |
*'''self''' (Selecciona o nodo contexto) |
||
*'''descendant-or-self''' (Selecciona o nodo contexto e os seus descendentes) |
*'''descendant-or-self''' (Selecciona o nodo contexto e os seus descendentes) |
||
*'''ancestor-or-self''' (Selecciona o nodo contexto e os seus ascendentes) |
*'''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. |
|||
==Pai (''parent'') == |
|||
===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''', '''=''', '''!=''', '''<code>&</code>lt<code>;</code>''', '''<code>&</code>gt<code>;</code>''', '''<code>&</code>lt<code>;</code>=''', '''<code>&</code>gt<code>;</code>=''' |
|||
;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: |
|||
==Fillos e Descendentes== |
|||
. self:: |
|||
==Veciños== |
|||
.. 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] |
|||
==Antepasados (Ancestors)== |
|||
⚫ | |||
⚫ | |||
Vexamos un exemplo: |
Vexamos un exemplo: |
||
<syntaxhighlight lang="xml" line start="1"> |
|||
<?xml version="1.0"?> |
<?xml version="1.0"?> |
||
Liña 102: | Liña 115: | ||
<xsl:variable name='nome' select='expresion XPath'/> |
<xsl:variable name='nome' select='expresion XPath'/> |
||
o resultado da expresión XPath estará dispoñible posteriormente coa referencia $nome. |
o resultado da expresión XPath estará dispoñible posteriormente coa referencia $nome. |
||
</syntaxhighlight> |
Revisión actual feita o 12 de xuño de 2024 ás 16:59
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, =, !=,
&
lt;
,&
gt;
,&
lt;
=,&
gt;
= - 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.