choose
El elemento choose
es un elemento que suele utilizarse junto con los elementos when
y otherwise
permitiendo expresar múltiples condiciones. El elemento otherwhise
es opcional.
La estructura de choose
es la siguiente:
<xsl:choose>
<xsl:when test="condicion1"><!-- ... --></xsl:when>
<xsl:when test="condicion2"><!-- ... --></xsl:when>
<xsl:when test="condicion3"><!-- ... --></xsl:when>
<!-- ... -->
<xsl:when test="condicionN"><!-- ... --></xsl:when>
<xsl:otherwise><!-- ... --></xsl:otherwise>
</xsl:choose>
Existen varias posibilidades:
- Si el valor evaluado por el elemento
when
es verdadero se añadirá a la salida el código que este contenga. - Si, por el contrario, el valor es falso y está presente el elemento
otherwise
, se añadirá a la salida el contenido de este último. - Si, por el contrario, ningún elemento
when
es verdadero y no está presente el elementootherwise
, no se añadirá nada a la salida.
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>
<h1>Colección de música</h1>
<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>
<xsl:choose>
<xsl:when test="precio > 10">
<td bgcolor="#ff00ff"><xsl:value-of select="artista"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artista"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
El código anterior aplica un fondo rosa aquellos artisas que tengan CDs con un precio superior a 10.
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>
<precio>12.99</precio>
</cd>
<cd>
<titulo>The Wall</titulo>
<artista>Pink Floyd</artista>
<precio>9.99</precio>
</cd>
<cd>
<titulo>Abbey Road</titulo>
<artista>The Beatles</artista>
<precio>14.99</precio>
</cd>
</catalogo>
En ese caso, la transformación XSLT daría como resultado un documento HTML:
<!DOCTYPE html>
<html>
<body>
<h1>Colección de música</h1>
<table border="1">
<tr bgcolor="#9acd32">
<th>Título</th>
<th>Artista</th>
</tr>
<tr>
<td>Thriller</td>
<td bgcolor="#ff00ff">Michael Jackson</td>
</tr>
<tr>
<td>The Wall</td>
<td>Pink Floyd</td>
</tr>
<tr>
<td>Abbey Road</td>
<td bgcolor="#ff00ff">The Beatles</td>
</tr>
</table>
</body>
</html>
El documento HTML se visualizaría de la siguiente manera:
Probar en el navegador