Gli operatori in XPath

17 marzo 2006

All’interno delle espressioni XPath possiamo utilizzare degli operatori per effettuare dei test in modo da rendere più complesse le operazioni di selezione che possiamo fare sui nodi dell’XML. Possiamo quindi ad esempio verificare che la posizione di un nodo sia maggiore ad un determinato valore oppure verificare se un nodo è l’ultimo nodo di un insieme di nodi e così via.

Vediamo tutti gli operatori:

Operatore Funzione
!= Diverso
= Uguale
< Minore
> Maggiore
>= Maggiore o uguale a
<= Minore o uguale a
and Operatore logico AND
or Operatore logico OR

In alcuni casi l’utilizzo dei caratteri speciali “<” e “>” può provocare errori in quanto questi caratteri delimitano gli elementi XML, sarà quindi opportuno utilizzare la codifica HTML < per il “<” minore e > per il “>” maggiore.

Vediamo subito un piccolo esempio. Per far questo modifichiamo leggermente il sorgente XML che abbiamo utilizzato negli ultimi esempi.
La modifica che introduciamo è la seguente: all’interno di ogni elemento <album> inseriamo un elemento <durata> che indica la durata in minuti dell’album in questione.

Esempio 9.

(l’XML sotto mostrato è solo una vista parziale per renderci conto della piccola modifica apportata)

     <album>
          <!– Cd acquistato a Roma nell’agosto del 2000 –>
          <titolo>Magic Touch</titolo>
          <anno>1985</anno>
          <etichetta>Blue Note</etichetta>
          <durata>59</durata>
     </album>
     <album>
          <!– Cd avuto in regalo per il compleanno del 2001–>
          <titolo>Stolen Moments</titolo>
          <anno>1991</anno>
          <etichetta>Blue Note</etichetta>
          <durata>72</durata>
     </album>

Codice XSLT utilizzato (listacd_es9.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>
          Verifica se un CD ha un tempo di durata maggiore di 60 minuti
          <hr/>
          <table cellpadding=”2″ cellspacing=”2″>
           <xsl:apply-templates select=”//artista//album”/> 
          </table> 
         </html>
     </xsl:template>


     <xsl:template match=”//artista//album”> 
         <tr bgcolor=”#f3f3f3″>
          <td width=”150″>
          <xsl:value-of select=”../../@nome”/>
          </td>
          <td width=”150″>
          <xsl:value-of select=”titolo”/> 
          </td>
          <td>
          <xsl:value-of select=”durata > 60″/> 
          <!– Restituisce true o False a seconda che la condizione sia soddisfatta o meno –>
          </td>
         </tr> 
     </xsl:template>

</xsl:stylesheet>

Risultato in Output della trasformazione  (esempio 9)

<html>
Verifica se un CD ha un tempo di durata maggiore di 60 minuti
<hr>
   <table cellpadding=”2″ cellspacing=”2″>
     <tr bgcolor=”#f3f3f3″>
         <td width=”150″>Stanley Jordan</td>
         <td width=”150″>Magic Touch</td>
         <td>false</td>
     </tr>
     <tr bgcolor=”#f3f3f3″>
         <td width=”150″>Stanley Jordan</td>
         <td width=”150″>Stolen Moments</td>
         <td>true</td>
     </tr>
     <tr bgcolor=”#f3f3f3″>
         <td width=”150″>Nick Drake</td>
         <td width=”150″>Pink Moon</td>
         <td>false</td>
     </tr>
     <tr bgcolor=”#f3f3f3″>
         <td width=”150″>Nick Drake</td>
         <td width=”150″>Bryter Layter</td>
         <td>false</td>
     </tr>
         <tr bgcolor=”#f3f3f3″>
         <td width=”150″>Nick Drake</td>
         <td width=”150″>Five leaves left</td>
         <td>true</td>
     </tr>
     <tr bgcolor=”#f3f3f3″>
         <td width=”150″>Jeff Buckley</td>
         <td width=”150″>Grace</td>
         <td>false</td>
     </tr>
     <tr bgcolor=”#f3f3f3″>
         <td width=”150″>Jeff Buckley</td>
         <td width=”150″>Mistery white boy</td>
         <td>true</td>
     </tr>
     <tr bgcolor=”#f3f3f3″>
         <td width=”150″>Joe Satriani</td>
         <td width=”150″>Surfing with the alien</td>
         <td>false</td>
     </tr>
     <tr bgcolor=”#f3f3f3″>
         <td width=”150″>Joe Satriani</td>
         <td width=”150″>Not of this earth</td>
         <td>false</td>
     </tr>
   </table>
</html>

Clicca qui per vedere il risultato della trasformazione sul browser.

Clicca qui per vedere l’XML (senza l’istruzione di assegnazione dell’XSL) sul browser.
Clicca qui per vedere l’XSLT sul browser.

Finalmente le cose iniziano a farsi interessanti! In quest’ultimo esempio abbiamo iniziato ad utilizzare un po’ più codice HTML creando una tabella in modo da formattare meglio i dati per presentarli in un modo più leggibile. Questo esempio dimostra come sia possibile creare del codice HTML utilizzando poche righe di codice XSLT; e siamo ancora agli inizi!

Riportando la nostra attenzione allo scopo però dell’esempio, abbiamo visto che <xsl:value-of select=”durata > 60″/> restituisce un valore booleano in base al risultato del confronto: true se l’album ha una durata maggiore di 60, False se questo non è vero.

L’utilizzo degli operatori si rivelerà più avanti molto importante quando dovremo selezionare solo determinati elementi in base a delle condizioni che devono essere soddisfatte (filtraggio dei dati).  Ad esempio, come possiamo filtrare i dati in output riportando solo gli elementi <album> con un tempo di <durata> superiore a 60 minuti? Per adesso non preoccupatevi, questo argomento sarà affrontato nei prossimi capitoli :))

Tutte le lezioni

1 ... 13 14 15 ... 30

Se vuoi aggiornamenti su Gli operatori in XPath inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Gli operatori 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