Lavorare con i numeri in XPath

17 marzo 2006

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.

Tutte le lezioni

1 ... 14 15 16 ... 30

Se vuoi aggiornamenti su Lavorare con i numeri in XPath inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Lavorare con i numeri in XPath

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy