Acquisire il valore di un elemento con XPath
Se volessimo puntarte un nodo piatto anzichè metterlo in corrispondenza con un modello, otterremmo un solo valore del nodo piatto. Proviamo a realizzare il seguente file XSLT:
<xsl:apply-templates />
</xsl:template>
<xsl:template match="/menu/aperitivi" />
<xsl:template match="/menu/primipiatti">
<xsl:value-of select="piatto" />
</xsl:template>
<xsl:template match="/menu/dolci" />
</xsl:stylesheet >
Il file in output di esempio che riceviamo mostra la trasformazione apportata. Cosa è successo agli altri nodi? Il motivo per cui otteniamo il valore di un solo nodo dipende dal comportamento di default di XSLT. Quando un insieme di nodi trova una corrispondenza con una selezione attraverso l´elemento <xsl:value-of />, viene visualizzato nell´output solo il valore del primo elemento dell´insieme dei nodi. Cioè quello che appare per primo nel sorgente XML. Nel nostro caso "Amatriciana". Come possiamo fare per selezionare un altro elemento? È sufficiente dichiarare il numero dell´elemento che vogliamo selezionare. Si deve mettere tra parente quadre [ e ] il numero. Avremo un codice XSLT del genere, prendendo spunto dal nostro sorgente XML:
dove [n] è il numero dell´elemento che vogliamo. Il valore n messo tra parentesi, si chiama predicato. Esso indica quale nodo deve essere inserito nella selezione. Vediamo un esempio con l´utilizzo dei predicati e ci facciamo un buon pranzetto dalla vasta scelta che abbiamo nel sorgente XML. Il codice XSLT sarà:
<xsl:template match="/">
<h1>Menu del giorno:</h1>
<strong>Antipasto:</strong> <xsl:value-of select="menu/aperitivi/piatto[4]" /><br />
<strong>Primo piatto:</strong> <xsl:value-of select="menu/primipiatti/piatto[2]" /><br />
<strong>Dolce:</strong> <xsl:value-of select="menu/dolci/piatto[1]" />
</xsl:template>
</xsl:stylesheet >
Il menu che ci ha prerato il cuoco, per la giornata di oggi possiamo leggerlo nel file di esempio. Niente male direi! Il codice XSLT ha un solo modello, corrispondente all´elemento radice. Questo modello mostra i diversi valori con l´indirizzamento assoluto e predicati numerici.
Selezionare gli attributi con XPath
Nell´esempio precedente abbiamo selezionato un valore di un elemento. Adesso ci occuperemo di stampare a video un attributo. Proviamo a selezionarlo allo stesso modo di come abbiamo fatto poc´anzi. Vogliamo selezionare il nome di un dolce ed il suo prezzo. Procediamo a scrivere il codice:
<h1>Dolce del giorno:</h1>
Dolce: <xsl:value-of select="menu/dolci/piatto[2]" /><br />
Prezzo:<xsl:value-of select="menu/dolci/piatto[2]/prezzo" />
</xsl:template>
Bene. Possiamo vedere il file di esempio che contiene la trasformazione. Ho scritto "bene" per modo di dire. Non va bene come abbiamo deciso di puntare al prezzo del dolce selezionato. Nel risultato, accanto a prezzo, appare un vuoto perchè nessun elemento corrisponde all´espressione "select" in quanto non esiste un elemento "prezzo". Dobbiamo semplicemente istruire il processore che deve cercare una corrispondenza con un attributo e non con un elemento. Lo si fa aggiungendo il simbolo @ davanti al nome. Adesso possiamo correggere il codice XSLT scrivendo qui di seguito l´unica differenza con quello sopra.
Finalmente possiamo vedere quando spenderemo leggendo il prezzo esatto nel file di esempio.
| < Prec. | Succ. > |
|---|

