xpath
Chemins de localisation et axes
Recherche…
Remarques
Un chemin d'emplacement XPath est une série d' étapes d'emplacement séparées par un caractère /
:
step1/step2/step3
Une étape d'emplacement contient un axe , un test de noeud et une liste facultative de prédicats . L' axe et le test de noeud sont séparés par deux deux-points ::
. Les prédicats sont entre crochets:
axis::nodeTest[predicate1][predicate2]
L'évaluation d'un chemin d'emplacement commence par un ensemble de nœuds contenant le nœud de contexte donné par le contexte de l'expression ou par le nœud racine , si le chemin d'emplacement commence par un /
. A chaque étape, chaque nœud N de l'ensemble de nœuds d'origine est remplacé par l'ensemble des nœuds
- peut être atteint à partir de N suivant l' axe donné,
- correspond au test de noeud et
- correspond à tous les prédicats .
Le résultat d'une expression de chemin d'emplacement correspond au dernier ensemble de nœuds obtenu après le traitement de toutes les étapes d'emplacement .
Traversant des éléments enfants
Passage du noeud racine à un élément descendant à l'aide de l'axe child
:
/child::html/child::body/child::div/child::span
L'axe child
étant l'axe par défaut, il peut être abrégé en:
/html/body/div/span
Traversant tous les descendants
Les axes descendant
et descendant-or-self
peuvent être utilisés pour trouver tous les éléments descendants d'un nœud à n'importe quelle profondeur. En revanche, l'axe child
ne traverse que les enfants immédiats.
/child::html/descendant::span
/child::html/descendant-or-self::*
La double barre oblique //
est un raccourci pour /descendant-or-self::node()/
. Les expressions suivantes sont donc équivalentes:
table//td
child::table/descendant-or-self::node()/child::td
child::table/descendant::td
table/descendant::td
Traversant les ancêtres
L'axe parent
ne contient que le parent d'un noeud. L'expression suivante sélectionne l'élément html
en faisant un détour sur l'élément body
:
/child::html/child::body/parent::html
..
est un raccourci pour parent::node()
Les axes ancestor
et ancestor-or-self
traversent tous les ancêtres d'un nœud. L'expression suivante renvoie tous les éléments div
qui sont les ancêtres du noeud de contexte:
ancestor::div
L'axe "self"
L'axe self
ne contient que le noeud de contexte lui-même. L'expression .
est un raccourci pour self::node()
et correspond toujours au noeud de contexte. Le .
Le raccourci est utile pour énumérer les descendants du nœud de contexte. Les expressions suivantes sont équivalentes:
.//span
self::node()/descendant-or-self::node()/child::span
descendant::span
L'axe self
peut être utile dans les prédicats XPath 1.0. Par exemple, pour sélectionner tous les enfants h1
, h2
et h3
du noeud de contexte:
*[self::h1 or self::h2 or self::h3]
Passage des nœuds suivants et précédents
Les axes following-sibling
et preceding-sibling
suivants contiennent les frères avant ou après le nœud de contexte, et les axes following
et preceding
contiennent tous les nœuds du document avant ou après le nœud de contexte, mais:
- Aucun de ces axes ne contient de nœuds d'attribut ou d'espace de noms.
- L'axe
following
ne contient pas de descendants. - L'axe
preceding
ne contient aucun ancêtre.
Exemples:
following::span[1]
following-sibling::*[last()]
Traversée d'attributs et de nœuds d'espace de noms
L' attribute
et namespace
axes d' namespace
contiennent tous les nœuds d'attribut et d'espace de nom d'un élément. Le raccourci @
représente l' attribute::
, donc les suivants sont équivalents:
child::div/attribute::class
div/@class