Corsi on-line
Chiudi
Newsletter:
  • Seguici su Facebook
  • Seguici su Twitter
  • Seguici su Google+
  • Seguici via RSS
  • Seguici col tuo Smartphone

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 &gt; 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 &lt; 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:
  1. se l'elemento <durata> del nodo in questione è maggiore di 65;
  2. il secondo controlla se è minore di 65;
  3. 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!
Ogni volta che una delle condizioni si verifica il processore applica le regole definite dall'elemento in questione e automaticamente ignora le altre e va oltre.Notate che al posto di <xsl:otherwise> avremmo anche potuto scrivere in modo esplicito <xsl:when test="durata = 65"> perchè ovviamente se non è maggiore di 65 e se non è minore di 65, allora automaticamente per esclusione sarà uguale al numero 65!

Corsi
Corso CSSCorso CSS
Web Design ed Accessibilità secondo il W3C con CSS ed XHTML. A partire da 29 €.
Corso XMLCorso XML
Creazione di strutture XML, XSL ed altri linguaggi eXtensible. A partire da 39 €.
Sommario
Annunci

Mr.Webmaster

Pubblicità
Chi Siamo
Contattaci
Collabora
Note Legali
© 2003 - 2012 Mr.Webmaster - Il portale dei Webmaster Italiani - Tutti i diritti riservati | Powered by IKIweb Internet Media S.r.l. - PIVA 02848390122