Sintassi XPath

XPath utilizza espressioni di percorso per selezionare nodi o insiemi di nodi in un documento XML. I nodi sono selezionati seguendo il percorso (path) o i passi (steps).

Documento di esempio XML

Utilizzeremo questo documento XML negli esempi seguenti.

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

Seleziona nodo

XPath utilizza espressioni di percorso per selezionare nodi in un documento XML. I nodi sono selezionati seguendo il percorso o i passi (step).

Di seguito è elencato alcune delle espressioni di percorso più utili:

Espressione Descrizione
nodename Seleziona tutti i nodi figli di questo nodo.
/ Seleziona dal nodo radice.
// Dalla selezione corrente, seleziona i nodi nel documento, indipendentemente dalla loro posizione.
. Seleziona il nodo corrente.
.. Seleziona il nodo genitore del nodo corrente.
@ Seleziona l'attributo.

Esempio

Nella tabella sottostante, abbiamo elencato alcune espressioni di percorso e i risultati delle espressioni:

Espressione di percorso Risultato
bookstore Seleziona tutti i nodi figli dell'elemento 'bookstore'.
/bookstore

Seleziona l'elemento radice 'bookstore'.

Nota: Se il percorso inizia con una barra obliqua (/), questo percorso rappresenta sempre il percorso assoluto fino a un elemento!

bookstore/book Seleziona tutti gli elementi 'book' che sono sottoelementi dell'elemento 'bookstore'.
//book Seleziona tutti i sottoelementi 'book', indipendentemente dalla loro posizione nel documento.
bookstore//book Seleziona tutti gli elementi 'book' discendenti dell'elemento 'bookstore', indipendentemente dalla loro posizione sotto 'bookstore'.
@@lang Seleziona tutti gli attributi con nome lang.

Predicati (Predicates)

Il predicato viene utilizzato per trovare un nodo specifico o un nodo che contiene un valore specifico.

Il predicato è racchiuso tra parentesi quadre.

Esempio

Nella tabella seguente, elenchiamo alcune espressioni di percorso con predicato e i loro risultati:

Espressione di percorso Risultato
/bookstore/book[1] Seleziona l'elemento book che è il primo tra i sottoelementi dell'elemento bookstore.
/bookstore/book[last()] Seleziona l'elemento book che è l'ultimo tra i sottoelementi dell'elemento bookstore.
/bookstore/book[last()-1] Seleziona l'elemento book che è il secondo dall'ultimo tra i sottoelementi dell'elemento bookstore.
/bookstore/book[position()<3] Seleziona i primi due elementi book che sono sottoelementi dell'elemento bookstore.
//title[@lang] Seleziona tutti gli elementi title che hanno un attributo con nome lang.
//title[@lang='eng'] Seleziona tutti gli elementi title che hanno l'attributo lang con valore eng.
/bookstore/book[price>35.00] Seleziona tutti gli elementi book all'interno dell'elemento bookstore, e il valore dell'elemento price deve essere maggiore di 35.00.
/bookstore/book[price>35.00]/title Seleziona tutti gli elementi title dell'elemento book all'interno dell'elemento bookstore, e il valore dell'elemento price deve essere maggiore di 35.00.

Seleziona nodi sconosciuti

I simboli jolly di XPath possono essere utilizzati per selezionare elementi XML sconosciuti.

Simbolo jolly Descrizione
* Corrisponde a qualsiasi nodo di elemento.
@* Corrisponde a qualsiasi nodo con attributo.
node() Corrisponde a qualsiasi tipo di nodo.

Esempio

Nella tabella seguente, elenchiamo alcune espressioni di percorso e i loro risultati:

Espressione di percorso Risultato
/bookstore/* Seleziona tutti i sottoelementi dell'elemento bookstore.
//* Seleziona tutti gli elementi del documento.
//title[@*] Seleziona tutti gli elementi title con attributi.

Seleziona più percorsi

Utilizzando l'operatore "|" negli espressioni di percorso, puoi selezionare più percorsi.

Esempio

Nella tabella seguente, elenchiamo alcune espressioni di percorso e i loro risultati:

Espressione di percorso Risultato
//book/title | //book/price Seleziona tutti gli elementi title e price dell'elemento book.
//title | //price 选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。