4. XPath (XML Path Language)

XPath est un langage de navigation et de sélection dans les documents XML. Il permet de localiser des éléments, attributs et autres nœuds dans l'arborescence XML. XPath est utilisé par XQuery, XSLT et de nombreuses autres technologies XML.

Définition XPath traite le document XML comme un arbre de nœuds. Chaque élément, attribut, texte, commentaire est un nœud. XPath permet de naviguer dans cet arbre et de sélectionner des sous-ensembles de nœuds.

4.1 Syntaxe de Base

/racine/enfant          <!-- Chemin absolu -->
//element               <!-- N'importe ou dans le document -->
./element               <!-- Relatif au contexte actuel -->
../element              <!-- Element parent -->
@attribut               <!-- Selection d'attribut -->

4.2 Axes de Navigation

Axes XPath Principaux
AxeDescriptionSyntaxe courte
child::Enfants directs/
parent::Parent direct..
self::Noeud courant.
descendant::Tous les descendants//
ancestor::Tous les ancetres-
following-sibling::Freres suivants-
preceding-sibling::Freres precedents-
attribute::Attributs@

4.3 Predicats (Filtres)

Les predicats permettent de filtrer les noeuds selection avec des conditions entre crochets [ ] :

/biblio/book[1]                      <!-- Premier livre -->
/biblio/book[last()]                 <!-- Dernier livre -->
/biblio/book[@lang='fr']             <!-- Livres en francais -->
/biblio/book[price > 20]             <!-- Livres avec prix > 20 -->
/biblio/book[count(author) > 1]      <!-- Livres avec plusieurs auteurs -->
//personne[adresse/pays = 'FRANCE']  <!-- Personnes en France -->

4.4 Fonctions XPath

Fonctions sur les Chaines

FonctionDescriptionExemple
contains(str, substr)Contient la sous-chaine//titre[contains(., 'XML')]
starts-with(str, prefix)Commence par//book[starts-with(title, 'Data')]
concat(s1, s2, ...)Concatenationconcat(first, ' ', last)
string-length(str)Longueur//auteur[string-length(nom) > 5]
lower-case(str)Minusculeslower-case(titre)
upper-case(str)Majusculesupper-case(code)

Fonctions Numeriques

FonctionDescriptionExemple
count(nodes)Nombre de noeudscount(//livre)
sum(nodes)Somme des valeurssum(//prix)
position()Position courante//item[position() < 3]
last()Derniere position//item[last()]

Fonctions Logiques

FonctionDescriptionExemple
not(expr)Negation//personne[not(email)]
boolean(expr)Conversion booleenboolean(//admin)

4.5 Operateurs

OperateurDescription
=, !=Egalite, Difference
<, >, <=, >=Comparaisons
and, orOperateurs logiques
|Union de noeuds
modModulo

4.6 Exemples Pratiques

Voir des exemples XPath avec resultats
<!-- Sur un repertoire de personnes -->

/repertoire/personne[2]//*
<!-- Tous les descendants de la 2e personne -->

/repertoire/personne[count(telephones/telephone) >= 2]/(nom | prenom)
<!-- Nom et prenom des personnes avec 2+ telephones -->

/repertoire/personne[adresse/pays = 'FRANCE']/(nom | prenom)
<!-- Personnes habitant en France -->

/repertoire/personne[@sexe = 'masculin' and adresse/pays = 'BELGIQUE']
<!-- Hommes belges -->

/repertoire/personne[emails/email[@type = 'professionnel'] 
    and not(emails/email[@type = 'personnel'])]/(nom | prenom)
<!-- Personnes avec email pro mais sans email perso -->

/repertoire/personne[contains(lower-case(prenom), 'a')]/adresse/pays
<!-- Pays des personnes dont le prenom contient 'a' -->

/repertoire/personne[adresse/codePostal mod 2 = 0]/prenom
<!-- Prenoms des personnes avec code postal pair -->
Piège Examen Crucial : [1] vs ()[1]

Cette différence est fréquemment testée à l'examen !

Quiz - Module 4 : XPath

Testez vos connaissances sur XPath.

Q1. Quelle expression sélectionne TOUS les éléments auteur du document ?

Q2. Que sélectionne //livre[1] ?

Q3. Comment sélectionner l'attribut isbn de tous les livres ?

Q4. Quelle fonction retourne le nombre de nœuds ?

Q5. Comment sélectionner les livres dont le prix est supérieur à 25 ?

Q6. Quel axe sélectionne les frères suivants ?