xpath
Percorsi di posizione e assi
Ricerca…
Osservazioni
Un percorso di posizione XPath è una serie di passaggi di posizione separati da un /
personaggio:
step1/step2/step3
Un passaggio di posizione contiene un asse , un test del nodo e un elenco facoltativo di predicati . L' asse e il test del nodo sono separati da due caratteri di due punti ::
. I predicati sono racchiusi tra parentesi quadre:
axis::nodeTest[predicate1][predicate2]
La valutazione di un percorso di ubicazione inizia con un set di nodi contenente il nodo di contesto dato dal contesto dell'espressione o dal nodo radice , se il percorso di ubicazione inizia con un /
. Ad ogni passaggio, ogni nodo N nel set di nodi originale viene sostituito con l'insieme di nodi che
- può essere raggiunto da N seguendo l' asse dato,
- corrisponde al test del nodo e
- corrisponde a tutti i predicati .
Il risultato di un'espressione del percorso di posizione è il set di nodi finale ottenuto dopo l'elaborazione di tutti i passaggi di posizione .
Attraversando elementi figlio
Spostamento dal nodo radice a un elemento discendente utilizzando l'asse child
:
/child::html/child::body/child::div/child::span
Poiché l'asse child
è l'asse predefinito, questo può essere abbreviato in:
/html/body/div/span
Attraversando tutti i discendenti
Gli assi descendant
e descendant-or-self
possono essere utilizzati per trovare tutti gli elementi discendenti di un nodo a qualsiasi profondità. Al contrario, l'asse child
attraversa solo i bambini immediati.
/child::html/descendant::span
/child::html/descendant-or-self::*
La doppia barra //
è una scorciatoia per /descendant-or-self::node()/
. Quindi le seguenti espressioni sono equivalenti:
table//td
child::table/descendant-or-self::node()/child::td
child::table/descendant::td
table/descendant::td
Attraversando gli antenati
L'asse parent
contiene solo il genitore di un nodo. L'espressione seguente seleziona l'elemento html
effettuando una deviazione sull'elemento body
:
/child::html/child::body/parent::html
..
è una scorciatoia per parent::node()
Gli assi degli ancestor
e degli ancestor-or-self
attraversano tutti gli antenati di un nodo. L'espressione seguente restituisce tutti gli elementi div
che sono gli antenati del nodo di contesto:
ancestor::div
L'asse "auto"
L'asse self
contiene solo il nodo di contesto stesso. L'espressione .
è una scorciatoia per self::node()
e corrisponde sempre al nodo di contesto. Il .
il collegamento è utile per enumerare i discendenti del nodo di contesto. Le seguenti espressioni sono equivalenti:
.//span
self::node()/descendant-or-self::node()/child::span
descendant::span
L' self
asse può essere utile in XPath 1.0 predicati. Ad esempio, per selezionare tutti i figli h1
, h2
e h3
del nodo di contesto:
*[self::h1 or self::h2 or self::h3]
Attraversando i nodi seguenti e quelli precedenti
I following-sibling
assi following-sibling
e following-sibling
preceding-sibling
contengono i fratelli prima o dopo il nodo di contesto e gli assi following
e preceding
contengono tutti i nodi nel documento prima o dopo il nodo di contesto, ma:
- Nessuno di questi assi contiene nodi attributo o namespace.
- L'asse
following
non contiene discendenti. - L'asse
preceding
non contiene alcun antenato.
Esempi:
following::span[1]
following-sibling::*[last()]
Attributo di attraversamento e nodi dello spazio dei nomi
Gli assi attribute
e namespace
contengono tutti i nodi attributo e spazio dei nomi di un elemento. La scorciatoia @
sta per attribute::
, quindi i seguenti sono equivalenti:
child::div/attribute::class
div/@class