Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Lavorare con i numeri in XPath

Le operazioni aritmetiche da compiere sui nodi di un file XML
Le operazioni aritmetiche da compiere sui nodi di un file XML
Link copiato negli appunti

Possiamo anche effettuare operazioni aritmetiche con i numeri.

Oeratore Funzione
+ Addizione
- Sottrazione
* Moltiplicazione
div Divisione
mod Restituisce il resto di una divisione
round() Arrotonda all'intero più vicino
ceiling() Arrotonda per difetto all'intero più vicino
floor() Arrotonda per eccesso all'intero più vicino
sum() Esegue la somma di un insieme di numeri interi

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.

Ti consigliamo anche