Il costrutto choose di XSL
Considerando sempre la categoria: modificare la lista di nodi correnti appartiene il costrutto (o per meglio dire la struttura di controllo): <xsl:choose> che deriva direttamente dal costrutto <xsl:if> difatti consente solamente di scegliere se attivare o meno una sezione, ma a volte è comodo poter scegliere una tra molte condizioni, e con il costrutto <xsl:if> è abbastanza difficoltoso gestirlo. Per questo motivo è presente anche il costrutto <xsl:choose>:
<xsl:choose>
<xsl:when test="...">...</xsl:when>
<xsl:otherwise>...</xsl:otherwise>
</xsl:choose>
Viene prodotto l'output corrispondente alla condizione <xsl:when> vera, oppure l'output specificato in <xsl:otherwise> se nessuna di queste è soddisfatta.
Tale costrutto è molto simile alla funzione di switch nel linguaggio C, difatti si seleziona una scelta tra molte alternative. Attraverso l'elemento <xsl:choose> possiamo definire degli elementi figli che sono <xsl:when> e <xsl:otherwise> e fare in modo che vengano eseguite determinate regole per ogni tipo di condizione che abbiamo definito. Un esempio ci permetterà di capire meglio come funziona questo elemento:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Prologo XML -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<table>
<tr>
<td>
Evidenziare con colori diversi le righe
degli album in base alla loro durata:
</td>
</tr>
<tr>
<td bgcolor="#f36622">
Giallo se la durata è inferiore a 65 minuti
</td>
</tr>
<tr>
<td bgcolor="#FFFFCC">
Arancio se la durata è superiore a 65 minuti
</td>
</tr>
<tr>
<td bgcolor="#33ccff">
Azzurro se la durata è uguale a 65 minuti
</td>
</tr>
</table>
<hr/>
<table cellpadding="2" cellspacing="2" bgcolor="#cc0000">
<tr bgcolor="#ffffff">
<td>Titolo Album</td>
<td>Durata Minuti</td>
<td>Artista</td>
</tr>
<xsl:apply-templates select="//artista//album"/>
</table>
</html>
</xsl:template>
<xsl:template match="//artista//album">
<xsl:choose>
<xsl:when test="durata > 65"> <!-- > 65 -->
<tr bgcolor="#f36622">
<td>
<xsl:value-of select="titolo"/>
</td>
<td>
<xsl:value-of select="durata"/>
</td>
<td>
<xsl:value-of select="../../@nome"/>
</td>
</tr>
</xsl:when>
<xsl:when test="durata < 65"> <!-- < 65 -->
<tr bgcolor="#FFFFCC">
<td>
<xsl:value-of select="titolo"/>
</td>
<td>
<xsl:value-of select="durata"/>
</td>
<td>
<xsl:value-of select="../../@nome"/>
</td>
</tr>
</xsl:when>
<xsl:otherwise> <!-- = 65) -->
<tr bgcolor="#33ccff">
<td>
<xsl:value-of select="titolo"/>
</td>
<td>
<xsl:value-of select="durata"/>
</td>
<td>
<xsl:value-of select="../../@nome"/>
</td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Analizziamo il codice XSLT prima di vedere l'output HTML. All'interno del modello, che viene richiamato, utilizziamo l'elemento <xsl:choose> per definire 3 possibili opzioni di scelta. I primi due elementi sono <xsl:when> che grazie all'attributo test controllano:
- se l'elemento <durata> del nodo in questione è maggiore di 65;
- il secondo controlla se è minore di 65;
- e il terzo elemento invece è <xsl:otherwise> (che sarebbe altrimenti) il che vuol dire che siamo nel caso in cui la <durata> è uguale a 65 minuti!
- << Lezione Precedente
- Indice Guida
- Lezione Successiva >>







