Il linguaggio XPath, utile per navigare un documento XML, fornisce un ampio set di funzioni per potenziare l'estrazione dei dati XML, rendendo questa fase più flessibile e precisa.
Le funzioni XPath sono raggruppate in tre categorie:
- Node-Set: accettano un node-set come argomento e restituiscono node-set o informazioni su un particolare nodo di esso;
- String: eseguono valutazioni, formattazioni e manipolazioni su stringhe;
- Boolean: valutano l'espressione passata come argomento e restituiscono un risultato booleano true o false, vero o falso;
- Number: valutano l'espressione passata come argomento e restituiscono un risultato numerico;
Tutte le funzioni hanno questa sintassi:
nomeFunzione( [ espressione ] ).
Come si nota, l'espressione può essere facoltativa.
Gli esempi che seguono le spiegazioni sono stati creati utilizzando il documento XML serra.xml
Funzioni della categoria Node-Set
| Funzione | Descrizione | Esempio | Risultato |
|---|---|---|---|
| count(espressione) | Restituisce il conteggio dei nodi individuati dall'espressione | count(//pianta) | 4 |
| position() | Restituisce la posizione del nodo corrente relativamente alla lista di nodi in cui si trova. | ||
| last() | Restituisce il numero di posizione dell'ultimo nodo di una lista | //pianta[last()] | 4 |
| name() | Se usato nella forma name(node-set) restituisce il nome del nodo passato come argomento, se invece è utilizzato semplicemente nella forma name() restituisce il nome del nodo corrente | ||
| local-name() | Resituisce il nome locale di un nodo senza il prefisso di namespace. L'utilizzo è identico a name(). | ||
| namespace-uri() | Restituisce l'URI del namespace di un nodo. L'utilizzo è identico a name(). |
Funzioni della categoria String
| Funzione | Descrizione | Esempio | Risultato |
|---|---|---|---|
| concat() | Concatena due o più stringhe passate come argomenti | concat('rosa', 'canina') | rosacanina |
| contains() | Determina se la prima stringa passata come parametro contiene la seconda stringa, passata anch'essa come parametro. Se i parametri passati sono dei riferimenti a nodi, di essi viene preso il valore ed interpretato come stringa | contains('tulipano','pan') | true |
| normalize-space() | Elimina gli spazi spazi bianchi in eccesso da una stringa o dal valore di un nodo interpretato come stringa | normalize-space(' rosa canina ') | rosa canina |
| starts-with() | Valuta se la stringa passata come primo argomento inizia con la stringa passata come secondo argomento. Restituisce true o false | starts-with('tulipano','pan') | false |
| string() | Converte un oggetto in una stringa | string(count(//pianta)) | "4" |
| string-length() | Restituisce il numero di caratteri presenti nella stringa passata come parametro. | string-length('felce') | 5 |
| substring() | Restituisce la sotto-stringa presente nella stringa passata come primo parametro ricavandola partendo dalla posizione passata come secondo argomento per una lunghezza pari al valore del terzo parametro. | substring('soqquadro',4,6) | quadro |
| substring-after() | Restituisce la sotto-stringa presente nella stringa passata come primo parametro successiva alla stringa passata come secondo parametro. | substring('tips.tricks@gmail.com','@') | gmail.com |
| substring-before() | Restituisce la sotto-stringa presente nella stringa passata come primo parametro precedente alla stringa passata come secondo parametro. | substring('tips.tricks@gmail.com','@'); | tips.tricks |
| translate() | Restituisce la stringa passata come primo parametro sostituendo i caratteri passati come secondo parametro con quelli contenuti nel terzo parametro. | translate('mirko','m','M') | Mirko |
Funzioni della categoria Boolean
| Funzione | Descrizione | Esempio | Risultato |
|---|---|---|---|
| boolean() | Converte l'espressione passata come parametro in un valore booleano. Se l'argomento è un numero, la funzione restituirà true nel caso il parametro fosse diverso da zero, altrimenti false. Se l'argomento è una stringa, la funzione restituirà true se questa non è vuota, altrimenti false. Se l'argomento è un riferimento ad un node-set, la funzione restituirà true se questo non è vuoto, altrimenti false. | boolean(//serra) | true |
| not() | Restituisce true se l'argomento è una affermazione falsa, e viceversa | not(contains('tulipano','pan')) | false |
| false() e true() | Restituiscono sempre false e true | ||
| lang() | Restituisce true o false a seconda che l'attributo xml:lang del nodo corrente corrisponda a quello passato alla funzione come parametro. | lang('it') | true/false |
E' da notare che la sintassi_XPath supporta le funzioni su numeri anche se utilizzate con gli operatori_XPath di confronto nelle espressioni filtro.
Funzioni della categoria Number
| Funzione | Descrizione | Esempio | Risultato |
|---|---|---|---|
| number() | Converte l'argomento passato alla funzione in numero, se non è possibile convertire restituisce NaN (not a number). | number('22342.3456'), number('rosa') | 22342.3456, NaN |
| ceiling() | Arrotonda un numero decimale all'intero superiore. | ceiling(0.5) | 1 |
| floor() | Arrotonda un numero decimale all'intero inferiore. | floor(0.5) | 0 |
| round() | Arrotonda un numero decimale all'intero superiore o inferiore più prossimo. | round(0.6), round(0.5), round(0.4) | 1, 1, 0 |
| sum() | Converte i valori del node-set passato come argomento in numeri e restituisce la loro somma. | sum(//pianta/@prezzo) | Restituisce la somma di tutti gli attributi prezzo dei nodi <pianta> |
Come da premessa, la tecnologia XPath fornisce un ricco toolset per la selezione dei dati XML e l'elaborazione di condizioni e nodi contenuti in un documento XML: essa infatti è ampiamente utilizzata nei parsers come sistema di ricerca dei nodi.
Alla prossima, MA.