XPath intensif

Utilisation des axes

Les axes disponibles en XPath

Il existe beaucoup d'axes disponibles. Une liste complète se trouve à cette adresse

Voici les plus courants :

ExempleCode d'exemple

Voici un XML d'exemple sur lequel les exemples XPath sont basés

1
<?xml version="1.0" encoding="UTF-8"?>
2
<biblio>
3
  <livre>
4
    <!-- classique -->
5
    <titre lang="fr">Harry Potter</titre>
6
    <prix>29.99</prix>
7
  </livre>
8
  <livre>
9
    <titre lang="fr">Apprendre XML</titre>
10
    <prix>39.95</prix>
11
    <!-- pas donné! -->
12
  </livre>
13
</biblio> 

child

Définitionchild - l'axe par défaut

Vous l'utilisez à chaque fois que vous ne spécifiez pas d'axe. Ce dernier renvoi tout les éléments enfants de l'élément courant

Exemple

1
/child::biblio/child::livre/child::titre/child::text()
2
ou bien (plus clair quand même):
3
/biblio/livre/titre/text()

Renvoi :

1
Harry Potter
2
Apprendre XML

descendant

Définitiondescendant - l'axe du "//"

Descendant recherche, comme son nom l'indique, dans tout les descendants du nœud sélectionné.

Il est utile pour chercher un nœud profond par exemple.

C'est aussi l'axe utilisé quand vous utilisez la syntaxe "//qqchose" équivalente à /descendant::qqchose

Exemple

1
/descendant::livre/descendant::text()
2
ou bien :
3
//livre//text()

Renvoi :

1
\n\t\t
2
Harry Potter
3
\n\t\t
4
29.99
5
\n\t
6
\n\t\t
7
Apprendre XML
8
\n\t\t
9
39.95
10
\n\t\t
11
\n\t\t
12
\n\t

descendant-or-self

Complémentdescendant-or-self

Il existe aussi un axe descendant-or-self. Mais à quoi peut-il bien servir ?

L'axe descendant-or-self permet de rechercher dans une structure récursive efficacement

Exemple

1
<?xml version="1.0" encoding="UTF-8"?>
2
<tiroir>
3
    <gigogne nom="poupée vide et triste" />
4
    
5
    <gigogne nom="énorme poupée 1">
6
        <gigogne nom="grosse poupée 1">
7
            <gigogne nom="moyenne poupée 1">
8
                <gigogne nom="petite poupée 1"/>
9
            </gigogne>
10
        </gigogne>
11
    </gigogne>
12
    
13
    <gigogne nom="moyenne poupée 2">
14
        <gigogne nom="petite poupée 2"/>
15
    </gigogne>
16
    
17
</tiroir>
1
/tiroir/gigogne[2]/descendant::gigogne/@nom

Renvoi :

1
grosse poupée 1
2
moyenne poupée 1
3
petite poupée 1

On voudrait cependant inclure l'énorme poupée aussi

En utilisant plutôt :

1
/tiroir/gigogne[2]/descendant-or-self::gigogne/attribute::nom
2
3
ou en abrégé :
4
/tiroir/gigogne[2]/descendant-or-self::gigogne/@nom
5
6
ou pour obtenir la même chose sans utiliser descendant-or-self mais 
7
en effectuant une double recherche de gigogne[2] dans l'arbre XML :
8
/tiroir/gigogne[2]//gigogne/@nom | /tiroir/gigogne[2]/@nom

On obtient :

1
énorme poupée 1
2
grosse poupée 1
3
moyenne poupée 1
4
petite poupée 1

attribute

Définitionattribute - un axe de type

Attribute est l'axe qui permet de sélectionner, comme son nom l'indique, un attribut XML.

Attribute est l'axe utilisé avec la syntaxe "@"

Exemple

1
/biblio/livre/titre/attribute::lang
2
ou bien (plus clair quand même):
3
/biblio/livre/titre/@lang

Renvoi :

1
fr
PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Version 2 Alexandre THOUVENIN, 2016. Version 1 de Jean-Baptiste Martin, 2015 (Contributions : Stéphane Crozat, les étudiants de NF29) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)