In questo articolo affronteremo la sintassi di XPath e capiremo come assemblare le sue regole per raffinare gli esiti delle query di estrazione dati da documenti XML generici.
Le regole della sintassi di XPath non sono molto complicate anzi a mio avviso rappresentano un ottimo metodo per esprimere un percorso (in inglese, path) da seguire all'interno di un documento XML.
Tuttavia, inizialmente potrebbe risultare difficile abbinare logicamente i vari simboli per formare le espressioni necessarie ad eseguire selezioni complesse di nodi XML.
Al fine di rendere più semplice la comprensione delle regole sintattiche cercherò di fornire un esempio per ogni regola che tratterò.
Come file XML da esplorare negli esempi che seguiranno utilizzo serra.xml.
Selezionare i nodi di un documento XML
Passiamo a trattare le path-expressions più utilizzate:
| Espressione | Descrizione | Path Exspression | Risultato |
|---|---|---|---|
| nome | Seleziona tutti gli elementi figli del nodo che corrisponde a quello indicato | ||
| / | Seleziona a partire dall'elemento radice | /pianta | Tutti gli elementi <pianta> a partire dalla radice <serra> |
| // | Seleziona i nodi a partire dal nodo indicato indipendentemente dalla posizione in cui ci troviamo | //colore | Seleziona tutti gli elementi <colore> a partire da dove si trovano |
| . | Seleziona il nodo corrente | ||
| .. | Seleziona il nodo Parent del nodo corrente | ||
| @nome | Seleziona i nodi che contengono l'attributo indicato |
Ricerche più precise con i Predicati
I Predicati sono utilizzati per la ricerca di nodi e attributi specifici che contengono un determinato valore.
I predicati devono essere contenuti in parentesi quadre: [].
| Espressione | Risultato |
|---|---|
| /serra/pianta[1] | Seleziona il primo nodo <pianta> figlio di <serra> |
| /serra/pianta[last()] | Seleziona l'ultimo nodo <pianta> figlio di <serra> |
| //serra/attrezzo[@id='1'] | Seleziona i nodi <attrezzo> il cui attributo id contiene un valore uguale a quello indicato |
Selezionare i Nodi non conosciuti
| Espressione | Descrizione | Path Exspression | Risultato |
|---|---|---|---|
| * | Seleziona qualsiasi elemento figlio del nodo indicato | /serra/* | Seleziona tutti gli elementi figli di <serra> indipendentemente dal nome |
| @* | Estrae qualsiasi attributo appartenente ai figli del nodo indicato | /serra/pianta/@* | Estrae tutti gli attributi degli elementi <pianta> figli di <serra> indipendentemente dal nome dell'attributo |
| node() | Seleziona qualsiasi nodo di qualsiasi tipo |
Selezioni Multiple
Grazie all'utilizzo dell'operatore '|' possiamo eseguire selezioni in più percorsi.
| Espressione | Risultato |
|---|---|
| //serra/pianta | //serra/vaso | Seleziona tutti i nodi <pianta> e <vaso> figli di <serra> |
Come si può notare le regole non sono tanto difficili ed in più offrono una vasta gamma di possibili operazioni da effettuare sui dati XML.
Alla prossima,
MA.
0 commenti:
Posta un commento
Non ti è chiaro qualcosa?
No problem, posta il tuo dubbio ;)
..... e ricordati di firmarlo!