Saltar al contenido principal

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 elemento otherwise, 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