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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow