Saltar al contenido principal

for-each

El elemento for-each es un elemento iterativo que permite crear bucles dentro de archivos XSLT. Este elemento permite recorrer una serie de nodos seleccionados para obtener cierta información que estos continenen.

La estructura de este elemento es la siguiente:

<xsl:for-each select="expresion-xpath">
<!-- template -->
<!-- <xsl:value-of select="expresion"> -->
</xsl:for-each>

Donde:

  • select es un atributo obligatorio e indica la ruta, por medio de una expresión XPath, de nodos sobre la que se va a iterar.

Dentro de este elemento podemos aplicar funciones de filtrado para limitar más el conjunto de nodos sobre los que se va iterar. Este filtado se realizará mediante expresiones XPath por lo que lo veremos más en detalle en las siguientes secciones.

Un ejemplo de su uso sería el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Mi Colección de CDs</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Título</th>
<th>Artista</th>
</tr>
<xsl:for-each select="catalogo/cd">
<tr>
<td>
<xsl:value-of select="titulo" />
</td>
<td>
<xsl:value-of select="artista" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Consideremos que tenemos el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="hoja.xsl"?>
<catalogo>
<cd>
<titulo>Thriller</titulo>
<artista>Michael Jackson</artista>
</cd>
<cd>
<titulo>The Wall</titulo>
<artista>Pink Floyd</artista>
</cd>
<cd>
<titulo>Abbey Road</titulo>
<artista>The Beatles</artista>
</cd>
</catalogo>

En ese caso, la transformación XSLT daría como resultado un documento HTML:

<!DOCTYPE html>
<html>
<body>
<h2>Colección de música</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Título</th>
<th>Artista</th>
</tr>
<tr>
<td>Thriller</td>
<td>Michael Jackson</td>
</tr>
<tr>
<td>The Wall</td>
<td>Pink Floyd</td>
</tr>
<tr>
<td>Abbey Road</td>
<td>The Beatles</td>
</tr>
</table>
</body>
</html>

El documento HTML se visualizaría de la siguiente manera:

Probar en el navegador