Nell'esempio 15 abbiamo messo luce sull'utilizzo <xsl:if
test="position() mod 2 = 0"> per cambiare
il colore delle righe nella tabella HTML in output. Abbiamo anche accennato che
grazie all'utilizzo delle variabili saremmo stati in grado di evitare la
duplicazione di codice ridondante ottenendo così un XSLT molto più pulito e
leggero. In effetti è proprio quello che faremo in questo capitolo.
Prima però dobbiamo introdurre il concetto di passaggio di parametri ai
modelli.
Abbiamo già visto ampiamente come utilizzare i modelli in XSLT. Adesso
però scopriremo come passare ai modelli dei parametri in modo da evitare i
problemi che possono dare la raggiungibilità delle varibili.
Per passare dei parametri ad un modello è molto
semplice. Utilizziamo l'elemento <xsl:with-param>
che ha un attributo obbligatorio name che
specifica il nome del parametro (che ovviamente dovrà essere univoco per ogni
modello). Possiamo inoltre definire un attributo select per
specificare un elemento o una variabile dalla quale prendere il valore.
La chiamata al modello sarà di questo tipo:
<xsl:call-template name="riga">
<xsl:with-param name="coloreriga" select="$colore"/>
<xsl:with-param name="percorso" select="$percorso"/>
</xsl:call-template>
La dichiarazione del modello sarà invece così:
<xsl:template name="riga">
<xsl:param name="coloreriga"/>
<xsl:param name="percorso"/>
.
.
.
</xsl:template>
Abbiamo passato al modello "riga" due parametri
che contengono il valore di una variabile. Naturalmente possiamo anche passare
dei valori che non siano delle varibili o degli elementi scrivendo semplicemente
il valore dell'elemento all'interno dei suoi TAG.
Adesso però riprendiamo l'esempio 15 e vediamo come
utilizzare questi nuovi metodi che abbiamo illustrato.
Esempio 18.
Il Documento XML e lo stesso utilizzato nell'esempio 15.
Codice XSLT utilizzato ( listacd_es18.xslt ):
<?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>
<xsl:variable name="percorso">img/</xsl:variable>
<table cellpadding="1" cellspacing="2" width="450" align="center" bgcolor="#000000">
<xsl:for-each select="listacd/artista">
<tr>
<td colspan="2" width="450" bgcolor="#ff8855">
<b>Artista: </b>
<xsl:value-of select="@nome"/>
<br/>
<b>URL sito web: </b>
<a href="{url}" target="_blank">
<xsl:value-of select="url"/>
</a>
</td>
</tr>
<xsl:for-each select="albums/album">
<xsl:if test="position() mod 2 = 0">
<xsl:variable name="colore">#f8f8f8</xsl:variable>
<xsl:call-template name="riga">
<xsl:with-param name="coloreriga" select="$colore"/>
<xsl:with-param name="percorso" select="$percorso"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="position() mod 2 != 0">
<xsl:variable name="colore">#f855f8</xsl:variable>
<xsl:call-template name="riga">
<xsl:with-param name="coloreriga" select="$colore"/>
<xsl:with-param name="percorso" select="$percorso"/>
</xsl:call-template>
</xsl:if>
</xsl:for-each>
<tr>
<td>
<br/>
</td>
</tr>
</xsl:for-each>
</table>
</html>
</xsl:template>
<xsl:template name="riga">
<xsl:param name="coloreriga"/>
<xsl:param name="percorso"/>
<tr bgcolor="{$coloreriga}">
<td width="150" align="center">
<img src="{$percorso}{img}"/>
</td>
<td width="300">
<b>Titolo: </b>
<xsl:value-of select="titolo"/>
<br/>
<b>Anno: </b>
<xsl:value-of select="anno"/>
<br/>
<b>Etichetta: </b>
<xsl:value-of select="etichetta"/>
<br/>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
Risultato in Output della trasformazione
(esempio 18).
Il Risultato in output come potete immaginare è identico
a quello dell'esempio 15 (a parte i diversi colori utilizzati per le righe in
modo da distinguere comunque i due esempi).
Clicca
qui per vedere il risultato della trasformazione sul browser.