Possiamo anche effettuare operazioni aritmetiche con i numeri.
|
Anche in questo caso un esempio è indispensabile per
vedere all'opera queste nuove funzioni.
Utilizziamo l'XML utilizzato nell'esempio precedente e introduciamo queste nuove funzioni per effettuare delle operazioni matematiche sui nodi. Supponiamo infatti di voler calcolare la durata media di tutti i nostri CD e allo stesso tempo per ogni artista calcolare la durata media dei sui CD che possediamo. Creiamo quindi una tabella con questi dati. Andiamo ora a vedere come possiamo scrivere questo in XSLT.
Esempio 10
Codice XSLT utilizzato ( listacd_es10.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>
Durata Media Totale dei CD:
<xsl:value-of select="sum(//durata) div count(//album)"/>
<!-- Sommo il tempo totale di tutti i CD e lo divido per il numero Totale di CD che possiedo -->
<hr/>
<table cellpadding="2" cellspacing="3">
<tr bgcolor="#c6c6c6">
<td>
Nome Artista
</td>
<td align="right">
Media Durata CD
</td>
<td align="right">
Tot. Tempo CD
</td>
<td align="right">
Numero albums
</td>
</tr>
<xsl:apply-templates select="//artista"/>
</table>
</html>
</xsl:template>
<xsl:template match="//artista">
<tr bgcolor="#f3f3f3">
<td>
<xsl:value-of select="@nome"/>
</td>
<td align="right">
<xsl:value-of select="round(sum(albums//durata) div count(albums//album))"/>
<!-- Sommo il tempo totale di tutti i CD dell'artista e lo divido per il numero Totale di CD che possiedo di quell'artista -->
</td>
<td align="right">
<xsl:value-of select="sum(albums//durata)"/>
<!-- Somma della durata Totale dei CD per artista -->
</td>
<td align="right">
<xsl:value-of select="count(albums//album)"/>
<!-- Numero Totale di CD per artista -->
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
Risultato in Output della trasformazione (esempio 10)
<html>
Durata Media Totale dei CD:
60<hr>
<table cellpadding="2" cellspacing="3">
<tr bgcolor="#c6c6c6">
<td>
Nome Artista
</td>
<td align="right">
Media Durata CD
</td>
<td align="right">
Tot. Tempo CD
</td>
<td align="right">
Numero albums
</td>
</tr>
<tr bgcolor="#f3f3f3">
<td>Stanley Jordan</td>
<td align="right">66</td>
<td align="right">131</td>
<td align="right">2</td>
</tr>
<tr bgcolor="#f3f3f3">
<td>Nick Drake</td>
<td align="right">56</td>
<td align="right">167</td>
<td align="right">3</td>
</tr>
<tr bgcolor="#f3f3f3">
<td>Jeff Buckley</td>
<td align="right">70</td>
<td align="right">140</td>
<td align="right">2</td>
</tr>
<tr bgcolor="#f3f3f3">
<td>Joe Satriani</td>
<td align="right">51</td>
<td align="right">102</td>
<td align="right">2</td>
</tr>
</table>
</html>
Clicca
qui per vedere il risultato della trasformazione sul browser.
Clicca qui per vedere l'XSLT sul browser.
Il risultato che abbiamo ottenuto è molto interessante!
Con pochissime righe di codice XSLT possiamo processare e applicare regole e
operazioni matematiche a centinai di nodi XML per creare codice HTML complesso
ed elaborato.