Vous êtes sur la page 1sur 22

XPath

Expressions de chemin

1
XPath : XML Path Language
 Recommandation du W3C :
 XML Path Language Version 1.0 W3C Recommendation 16
November 1999
http://www.w3.org/TR/1999/REC-xpath-19991116
 XML Path Language (XPath) 2.0
W3C Recommendation 23 January 2007
http://www.w3.org/TR/xpath20
 XML Path Language (XPath) 2.0 (Second Edition)
W3C Recommendation 14 December 2010
http://www.w3.org/TR/xpath20
 XML Path Language (XPath) 3.0
W3C Recommendation 08 April 2014
http://www.w3.org/TR/xpath-30

2
XPath : XML Path Language
 XPath est à la base de toute navigation dans
un document XML
 Utilisé aussi bien dans XQuery que dans
XSLT, XPointer et XLink
 Permet de spécifier des expressions pour
désigner des objets (éléments ou attributs)
dans l’arborescence d’un document XML
 Syntaxe non XML

3
XPath : XML Path Language
 XSLT se base sur XPath pour faire référence aux
différents noeuds (d’un document XML) qu’on veut
manipuler .

 Notamment, dans les attributs :


 "match" de la balise "template",

 "select" de la balise "apply-templates"

 "select" de la balise "value-of",

 …

4
XPath : Expressions de chemin
 Un chemin XPath est composé d’une expression

 Une expression XPath :


 Permet de naviguer dans un arbre XML et sélectionner des noeuds particuliers.
 Constituée d’une ou de plusieurs étapes :
/étape1/étape2/... /étapeN
Ex.
//child::notice/child::auteurs/child::auteur[attribute::type="pers-mora"]

 Une étape dans une expression de chemin comprend :


 une direction (Axe)  suivie de ::
 un sélecteur (Test)
 un prédicat (Condition)  mis entre 2 crochets [ ].

direction::sélecteur[prédicat]

Ex. //child::auteur[@type="pers-mora"]

5
Expressions de chemin : Étape
 Direction (Axe ) :
Définit le sens de la relation entre le nœud courant et le jeu de
nœuds à localiser
 Descente : child, descendant, descendant-or-self
 Remontée : parent, ancestor, ancestor-or-self
 Traversée : preceding-sibling, following-sibling
preceding, following

 Sélecteur (Test) : nom du noeud à localiser

 Prédicat (Condition) : pour affiner la sélection (optionnel, répétable)


(mis entre “[” et “]”)

6
Etape : Direction (Axe)
 self
 Child
 Parent
 descendant, descendant-or-self
 ancestor, ancestor-or-self
 following, following-sibling
 preceding, preceding-sibling
(Voir pages 11-
14)

7
Etape : Sélecteur (Test)
 Nom
 *
 Type
 node()
 text()
 comment()
 processing-instruction()

8
Etape : Prédicat (condition)

 ‘[‘ Condition ‘]’


 Quelques conditions
 [position()<3]
 [position()=last()-1]
 [2]
 [attribute::type="pers-mora"]
 Prédicats peuvent être chaînés [ ][ ]

9
Exemples Xpath (Location Path)
 //child::auteur[position()>1]
 //descendant::nom[position()=3]
 //child::auteur[attribute::type="pers-phys"][position()=2]
 //child::auteurs/preceding-sibling::*
 //child::auteurs/preceding::*
 //child::nom/following-sibling::*
 //child::nom/following::*
 //child::nom/ancestor::auteurs
 //self::auteurs

10
XPath : Expressions de chemin

Child Parent

11
XPath : Expressions de chemin

Descendant Ancestor

12
XPath : Expressions de chemin

Preceding-sibling Following-sibling

13
XPath : Expressions de chemin

Preceding Following

14
Abréviations
 child peut être implicite
 child::auteur/child::nom => auteur/nom

 attribute peut être remplacé par « @ »


 //attribute::type => @type
 Self::node() peut être remplacé par un point « . »
 //auteurs/self::node() => //auteurs/.
 parent::node() peut être remplacé par ..
 //auteurs/parent::node() => //auteurs/..

15
XPath : Expressions de chemin
Sélecteur Nœud sélectionné
/* racine du document
// un chemin demandant tous les descendants d'un
nœud plutôt que juste les enfants immédiats
. nœud courant
//* tous les noeuds de type « élément »
//e l’élément « e »
//@a l'attribut « a »
//@* tous les attributs
//node() n’importe quel noeud
//text() tout nœud textuel
//processing-instruction() toute instruction de traitement

16
<!--Le document XML sur lequel seront basés nos exemples est " notice.xml “--> :

<?xml-stylesheet type="text/xsl" href=“notice.xsl"  ?>


<notice type="procite">
<accès>
<restreint />
</accès>
<lisibilité>
<restreint />
</lisibilité>
<auteurs>
<auteur type="pers-mora">
<nom>Bombardier International</nom>
<initiales>BI</initiales></auteur>
<auteur type="pers-phys">
<nom>Renaud Beauchesne</nom>
<initiales>RB</initiales></auteur>
<auteur type="pers-phys">
<nom>Morency et filles</nom>
<initiales>RB</initiales></auteur>
</auteurs>
<cote valeur="456.789" />
<titre>L'automne</titre>
<anpub>1998</anpub>
<résumé>
<par>Les auteurs, très nombreux, se régalent de métaphores sur leur saison préférée,
qui est l'automne. Bien peu de pages sont consacrées aux autres saisons, savoir: l'été,
l'hiver et le printemps.</par>
</résumé>
</notice>

17
Quelques exemples d’expressions XPath
 //node() : tout nœud
 //* : tout élément
 Forme développée : //child::*
 //text() : tout nœud textuel (contenu textuel)
 //titre/text() : le contenu textuel de l’élément nom
 //auteur : tout élément auteur
 Forme développée : //child::auteur
 //auteur/nom/text() : le contenu textuel de l’élément nom fils de auteur
 //auteur/node() : tout nœud (élément) qui vient directement sous auteur
 //auteur/nom : tout élément nom avec un père auteur
 Forme développée : //child::auteur/child::nom
 //auteurs/auteur/nom : tout élément nom avec un père auteur et un grand-père auteurs
 //auteurs/*/nom : tout élément nom avec un grand-père auteurs
 //notice//nom : tout élément nom avec un ancêtre notice
 //auteurs/auteur[@type="pers-mora"]/nom : tout élément nom fils d’un élément auteur
qui un père auteurs et un attribut type dont la valeur est pers-mora
 //auteur[nom="Bombardier International"] : tout élément auteur qui a comme fils
un élément nom dont le contenu textuel est Bombardier International

18
Quelques exemples d’expressions XPath
 //child::auteur/ancestor::* : tout élément qui vient au-dessus de auteur
 (parent et ancêtres)
 //child::auteur/parent::* : l’élément qui vient directement au-dessus de auteur  (parent)
 //child::auteurs/descendant::* : tout élément qui vient au-dessous de auteur
 (fils et descendants)
 //child::auteurs/child::* : tous les fils directs de l’élément auteurs
 //child::auteurs/following-sibling::* : tout élément qui suit directement l’élément auteurs et
qui se trouve au même niveau (frères)
 //child::auteurs/following::* : tout élément qui suit l’élément auteurs et qui se trouve soit
au même niveau (frères) ou dans un niveau inférieur (descendants des frères) ou supérieur
(ancêtres des frères) à l’exception des ancêtres et des descendants directes de l’élément
courant.
 //processing-instruction() : toute instruction de traitement
 //auteur[2] : tout élément auteur qui est le deuxième fils auteur de son père
 //auteur[position()=2] : idem
 //*[position()=2 and self::auteur] : idem
 //auteur[position()=last()] : tout élément auteur qui est le dernier fils auteur de son père
 //nom[last()=1] : tout élément nom qui est le seul fils nom de son père
 //auteurs/auteur[position()>1] : tout élément auteur qui à un père auteurs et qui n'est pas le
premier fils auteur de son père
 //auteur[position() mod 2 = 1] : tout élément auteur qui est un fils auteur impair
 //@type : tout attribut type
 //@* : tout attribut

19
Fonctions XPath

 Fonctions applicables aux nœuds :


 count()
 count(//auteur)
 position()
 //auteur[position()=2]
 last()
 //auteur[last()-1]

20
Fonctions XPath
 Fonctions applicables aux chaînes de caractères :
 concat() concaténation de chaînes de caractères
 concat('Le livre dont le titre est ', //titre, ' a été écrit par ', //auteur[1]/nom, '
et ', //auteur[2]/nom, ' et ', //auteur[3]/nom, ' et a comme cote: ', //@valeur)
 string-length
 string-length(//auteur[2])
 translate
 translate(//titre, "abcdefghijklmnopqrstuvwxyz",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ")
 Substring, substring-before et substring-after
 substring(chaine1, decalage, longueur)
 substring("information", 3, 5)  donne forma
 substring-before(chaine1, chaine2) / substring-after(chaine1, chaine2)
 substring-before(« Maroc", "a")  donne: fr
 substring-after(« Maroc", "a")  donne: nce

21
Références
 XML Path Language (XPath) 3.0
W3C Recommendation 08 April 2014
http://www.w3.org/TR/xpath-30
 Langage XML Path (XPath) Version 1.0
Recommandation du W3C du 16 Novembre 1999
http://xmlfr.org/w3c/TR/xpath
 XPath : Localiser les données. (OpenClassrooms website) :
https://openclassrooms.com/fr/courses/1766341-structurez-vos-donnees-avec-
xml/1769083-xpath-localiser-les-donnees
 XPath Tutorial (W3 Schools :
http://www.w3schools.com/xpath/xpath_examples.asp
 XPath Tutorial. (W3 Schools) : https://www.w3schools.com/xml/xpath_intro.asp
 XPath. (MDN website) :
https://developer.mozilla.org/fr/docs/Web/XPath
 https://developer.mozilla.org/fr/docs/Utilisation_de_XPath

22

Vous aimerez peut-être aussi