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

Gli operatori in XPath

Le relazioni che possono essere verificate sui nodi di un file XML
Le relazioni che possono essere verificate sui nodi di un file XML
Link copiato negli appunti

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 :))

Ti consigliamo anche