Documente Academic
Documente Profesional
Documente Cultură
Introduccin
Una forma de aadir un poco de estilo a nuestros XML es con las plantillas XSLT.
Las pginas HTML son en definitiva tags con atributos y valores, tipo XML. Por poner
un ejemplo, toda pgina HTML bien formada contiene almenos un nodo padre <html>
y dentro de ste encontramos un nodo hijo cabecera <head> con otro nodo con el
ttulo de la pgina <title>, y un nodo hermano de cabecera que sera<body>, todos
oportunamente cerrados.
<html>
<head>
<title></title>
</head>
<body>
</body>
</html>
<head>
<title>Poetas</title>
</head>
<body>
<h3>Poetas del 27</h3>
<table border="1">
<thead>
<th>Nombre</th>
<th>Nacimiento</th>
<th>Pais</th>
</thead>
<xsl:for-each select="Poetas/Poeta">
<tr>
<td>
<a href="{enlace}">
<xsl:value-of select="nombre" />
<xsl:text> </xsl:text>
<xsl:value-of select="apellidos" />
</a>
</td>
<td>
<xsl:value-of select="@nacimiento" />
</td>
<td>
<xsl:value-of select="@pais" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Vamos a analizarla un poco. Todos los tags xsl empiezan con <xls: > y deben ser
debidamente cerrados. En las cabeceras encontramos primero la codificacin de
carcteres, que como ya habamos puesto en el XML ser tambin utf-8 y despus
tenemos abiertos por nomenclatura los tags de stylesheet y template.
En template encontramos el atributo match a / indicando el nodo raiz al principio de
todo e indicando cundo tiene que empezar a procesar el XML. Como / es
simplemente la raiz indicamos que estamos dentro del XML, justo antes del tag
<Poetas>.
Vamos bajando hasta encontrar el tag for-each, que indica el bucle dnde
recorreremos cada Poeta. El atributo select indica el nodo que se recorrer, en
nuestro caso indicamos Poetas/Poeta para hacer que recorra cada uno de los Poetas.
Una vez dentro del nodo tenemos que mostrar los valores y los atributos. Empezamos
por el enlace, que curiosamente es un caso especial, ya que tenemos que mostrar un
valor como si fuera un atributo del tag <a>, para estos casos basta con poner el
nombre del nodo hijo entre llaves {enlace}.
Seguidamente mostramos un valor con el tag value-of y en el select indicamos el nodo
hijo que queremos mostrar. Fijaros que entre nombre y apellidos hay un tag text. Sirve
para mostrar texto simple en XSLT, en este caso lo utilizamos para mostrar un
espacio.
Por ltimo para mostrar los atributos del ao y el pas usamos el mismo tag value-of
pero en select en vez de indicar el nodo escribimos una @ y el atributo @nacimiento,
@pais.
Ahora si abrimos nuestro .XML con Internet Explorer o Firefox (parece que a Chrome
no le gustan los XSL) deberamos ver nuestra tabla generada dinmicamente:
Para demostrar que es el cliente y no el servidor quien pinta los datos a partir de la
plantilla podemos visualizar el cdigo fuente y veremos simplemente el XML. Sin
embargo utilizando alguna herramienta para analizar el DOM, como el addon Firebug
de Firefox, podemos ver que el HTML generado en el cliente es el siguiente:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Poetas</title>
</head>
<body>
<h3>Poetas del 27</h3>
<table border="1">
<thead>
<th>Nombre</th>
<th>Nacimiento</th>
<th>Pais</th>
</thead>
<tbody>
<tr>
<td>
<a
href="http://es.wikipedia.org/wiki/Garcia_Lorca">Federico Garcia
Lorca</a>
</td>
<td>1898</td>
<td>Espana</td>
</tr>
<tr>
<td>
<a
href="http://es.wikipedia.org/wiki/Antonio_de_Lara">Antonio Lara de
Gavilan</a>
</td>
<td>1896</td>
<td>Espana</td>
</tr>
<tr>
<td>
<a href="http://es.wikipedia.org/wiki/Pablo_Neruda">Pablo
Neruda</a>
</td>
<td>1904</td>
<td>Chile</td>
</tr>
</tbody>
</table>
</body>
</html>