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.
/racine/enfant <!-- Chemin absolu -->
//element <!-- N'importe ou dans le document -->
./element <!-- Relatif au contexte actuel -->
../element <!-- Element parent -->
@attribut <!-- Selection d'attribut -->
| Axe | Description | Syntaxe 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 | @ |
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 -->
| Fonction | Description | Exemple |
|---|---|---|
contains(str, substr) | Contient la sous-chaine | //titre[contains(., 'XML')] |
starts-with(str, prefix) | Commence par | //book[starts-with(title, 'Data')] |
concat(s1, s2, ...) | Concatenation | concat(first, ' ', last) |
string-length(str) | Longueur | //auteur[string-length(nom) > 5] |
lower-case(str) | Minuscules | lower-case(titre) |
upper-case(str) | Majuscules | upper-case(code) |
| Fonction | Description | Exemple |
|---|---|---|
count(nodes) | Nombre de noeuds | count(//livre) |
sum(nodes) | Somme des valeurs | sum(//prix) |
position() | Position courante | //item[position() < 3] |
last() | Derniere position | //item[last()] |
| Fonction | Description | Exemple |
|---|---|---|
not(expr) | Negation | //personne[not(email)] |
boolean(expr) | Conversion booleen | boolean(//admin) |
| Operateur | Description |
|---|---|
=, != | Egalite, Difference |
<, >, <=, >= | Comparaisons |
and, or | Operateurs logiques |
| | Union de noeuds |
mod | Modulo |
<!-- 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 -->
//livre[1] → Le premier livre de CHAQUE parent(//livre)[1] → Le premier livre du document entierCette différence est fréquemment testée à l'examen !
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 ?