Axes XPath

L'exemple de Document XML


XML cours tutorial

Nous allons utiliser le document XML suivant dans les exemples ci-dessous.

Sélectionner le code

<?xml version="1.0" encoding="ISO-8859-1"?>

<stock>

<livre>
<title lang="eng">Harry Potter</title>
<prix>29.99</prix>
</livre>

<livre>
<title lang="eng">Learning XML</title>
<prix>39.95</prix>
</livre>
<produit> <nom> Livre </nom><prix monnaie="Francs"> 50 </prix> <comment> Un commentaire </comment> </produit> <produit> <nom> CD </nom><prix monnaie="Euros"> 23 </prix> </produit> <!-- Texte --> </stock>

Les axes de recherche XPath

Un axe définit un ensemble de nœuds par rapport au nœud actuel.

Le tableau suivant résume tous les axes

AxisName

Nom de l’axe en français

Résultat

ancestor

ancêtre

Sélectionne tous les ancêtres (parents, grands-parents, etc.) du nœud actuel

ancestor-or-self

ancêtre-ou-self

Sélectionne tous les ancêtres (parents, grands-parents, etc.) du nœud actuel et le nœud actuel lui-même

attribute

attribut

Sélectionne tous les attributs du nœud actuel

child

enfant

Sélectionne tous les enfants du nœud actuel

descendant

descendant

Sélectionne tous les descendants (enfants, petits-enfants, etc.) du nœud actuel

descendant-or-self

descendant-ou-self

Sélectionne tous les descendants (enfants, petits-enfants, etc.) du nœud actuel et le nœud actuel lui-même

following

suivant

Sélectionne Tout dans le document après la balise de fermeture du nœud actuel

following-sibling

la suite-sibling

Sélectionne tous frères et sœurs après le nœud actuel

namespace

espace de noms

Sélectionne tous les nœuds d'espace de noms du nœud actuel

parent

parent

Sélectionne le parent du nœud actuel

preceding

précédant

Tout sélectionne dans le document qui est avant la balise de début du nœud actuel

preceding-sibling

frère précédent

Sélectionne tous frères et sœurs avant le nœud actuel

self

Self

Sélectionne le nœud actuel


Expression de chemin de localisation

Un chemin de localisation peut être absolue ou relative.
Un chemin de localisation absolue commence par une barre oblique (/) et un chemin de localisation relative non.
Dans les deux cas, que le chemin de localisation consiste en une ou plusieurs étapes, séparées par une barre oblique :

Un chemin absolue:

/step/step/...

Un chemin relatif :


step/step/...

Chaque étape est évaluée pour les nœuds dans l'ensemble de nœuds actuel.
Une étape consiste à :

  • un axe (définit un sens de recherche dans l'arbre-relation entre les nœuds et sélectionnés et le nœud actuel)
  • un test de noeud (identifie un nœud dans un axe)
  • zéro ou plusieurs précisions (pour affiner l'ensemble de nœuds sélectionné) on parle aussi de filtre

La syntaxe d'une étape de localisation est :

axisname::nodetest[filtre]

Exemples : ce tableau donne un exemple pour chaque axe

Exemple

Résultat

Child::livre

Sélectionne tous les nœuds de livre qui sont des enfants du nœud actuel

attribute::lang

Sélectionne l'attribut lang du nœud actuel

Child:: *

Sélectionne tous les enfants du nœud actuel

attribut:: *

Sélectionne tous les attributs du nœud actuel

Child::Text()

Sélectionne tous les nœuds enfants de texte du nœud actuel

Child::node()

Sélectionne tous les nœuds enfants du nœud actuel

descendant::livre

Sélectionne tous les descendants de livre du nœud actuel

Ancestor::livre

Sélectionne tous les ancêtres de livre du nœud actuel

Ancestro or self::livre

Sélectionne tous les ancêtres du livre du nœud actuel - et le courant même si c'est un nœud de livre

Child:: * / child::prix

Sélectionne tous les enfants de prix du nœud actuel

Filtrer les noeuds

node()
tous les noeuds de l'axe sauf la racine,
/stock/produit/prix/node()

id(label)
le noeud repéré par une étiquette,
id('CD')/prix

Les conditions

Rappel : les sélecteurs de noeuds sont de la forme :
 axe::filtre[condition1][condition2]...

Condition d'existence

expression-xpath
vraie si l'expression renvoie un ensemble non vide de noeuds.
/stock/produit[prix/attribute::monnaie]

/stock/produit[prix[attribute::monnaie]]

Ces expressions sélectionnent les noeuds produit à condition qu'un prix existe avec l'attribut monnaie précisé.

Condition de position

numéro
vraie si le noeud courant à cette position dans le contexte courant.
produit[2][comment]

produit[comment][2]

La première expression sélectionne les noeuds produit en deuxième position si il possède un élément fils comment, la seconde sélectionne le deuxième noeud produit qui possède un élément fil comment.

Les conditions logiques

expr-xpath1 relation expr-xpath2            
vraie si il existe n1 (dans le résultat de expr-xpath1) et n2 (dans le résultat de expr-xpath2) qui respectent la relation. les relations possibles sont =, !=, <, <=, >, >=.
produit[prix = 100] (1)

produit[prix != 100] (2)

produit[prix < /stock/produit/prix] (3)

Explications : (1) les produits qui ont un prix égal à 100 ; (2) les produits qui ont un prix différent de 100 ; (3) tous les produits sauf les plus onéreux.
condition1 andcondition2
vraie si les deux conditions le sont également.
produit[prix > 10 and comment]

condition1 or condition2
vraie si au moins une des deux conditions est vraie.
not(condition)
vraie si la condition est fausse.
produit[not(prix != 100)]

tous les prix sont égaux à 100.



>Cours precedent:
cours precedent  XPATH syntaxe
    Sommaire de :
Le langage XML
 Cours suivant:
XPATH operateurs et fonction   cours suivant
Par carabde 10 mai 2014