Vous êtes sur la page 1sur 38

XPath

XML Path Language

Ahmed ZELLOU
zellou_ahmed@hotmail.com
ISI, ISRT & ISEM SupMTI, 2021-2022.
Plan

n Introduction
n Utilisation
n Expression de chemin
n Nœuds Xpath
n Sélection des nœuds
n Prédicats
n Les Axes Xpath
n Accès par Axe
n Exemple d’expressions Xpath
n Atelier
2
A.ZELLOU
Introduction

Introduction n XPath (XML Path) est un langage pour chercher


des éléments ou des attributs dans un document
Expression de
XML.
chemin
n C’est une syntaxe pour définir des parties d'un
document XML
Sélection des
nœuds n Il utilise les expressions de chemin pour naviguer
dans des documents XML
Prédicats n Il contient une bibliothèque de fonctions standard
n Un élément essentiel dans XSL.
Axes Xpath
n Syntaxe non XML
Exemple n Supporte XML Namespaces
n C’est une recommandation W3C du 1999 V 1.0.
Atelier 3
A.ZELLOU
Introduction

Introduction n Version 2 en 2007, Version 3 en 2014.


n Utilisable par plusieurs technologues : XSL,
Expression de Xquery, Xinclude, SOAP, XUF, .
chemin
n XSL, XPath et XQuery partagent le même modèle
Sélection des
de données et supportent les mêmes fonctions et
nœuds opérateurs.
n Petit langage de programmation avec des tests, des
Prédicats fonctions et des expressions

Axes Xpath

Exemple

Atelier 4
A.ZELLOU
XPath - Parcours d'arbre

Introduction n Xpath opère sur l'arbre d'un document.


<livre auteur = "ZELLOU"> racine
Expression de <titre>Technologie XML</titre>
chemin <chapitre>
<section> XSL </section>
<section>XPath</section> livre
Sélection des
nœuds </chapitre>
Auteur = "ZELLOU"

titre chapitre chapitre
</livre>
Prédicats

section section
Technologie XML
Axes Xpath

XLS XPath
Exemple 5

Atelier
n Un document XML est traité sous forme d'un arbres
de nœuds. A.ZELLOU
Nœuds XPath

Introduction n Sept types de nœuds :


n Nœuds de document.
Expression de
chemin n Éléments.
n Attributs.
Sélection des
nœuds n Texte.
n Espace de noms.
Prédicats
n Instruction de traitement.
Axes Xpath n Commentaire.

Exemple
n Théorie des Arbres : nœud, arc, chemin et contenu.

Atelier 6
A.ZELLOU
Relations entre nœuds

Introduction n Parent : Chaque élément ou attribut a un parent


(sauf la racine).
Expression de
chemin n Enfant : l’élément fils d’un nœud. Un nœud peut
avoir zéro, un ou plusieurs enfants.
Sélection des n Fraternité : Nœuds qui ont le même parent.
nœuds
n Ancêtres : Le parent d'un nœud, le parent du parent,
Prédicats
etc.
n Descendants : Enfants d'un nœud, les enfants des
Axes Xpath enfants, etc.

Exemple

Atelier 7
A.ZELLOU
Expression de chemin

Introduction n XPath utilise des expressions de chemin pour


sélectionner un ensembles de nœuds dans un
Expression de
document XML.
chemin
n Même syntaxe que la navigation dans un système de
gestion de fichiers (/).
Sélection des
nœuds n Un chemin peut être :
n Absolu :
Prédicats
n Commence à la racine.
Axes Xpath n /étape1/…/étapeN
n Relatif :
Exemple
n Commence à un nœud courant.
Atelier
n étape1/…/étapeN 8
A.ZELLOU
Expression de chemin

Introduction n Une expression de chemins spécifie une traversée


de l'arbre du document :
Expression de n Depuis un nœud de départ.
chemin
n Vers un ensemble de nœuds cibles.
Sélection des n Les cibles constituent la valeur du cheminement.
nœuds
n Exemple :
Prédicats n /livres/livre/chapitre/section/paragraphe

Axes Xpath

Exemple

Atelier 9
A.ZELLOU
Sélection des nœuds

n Les expressions de sélection sont les suivantes :

Expression Description
Nom_nœud Sélectionne le sous arbre du nœud nommé
/ Sélectionne à partir du nœud racine
// Sélectionne tous les nœuds du document à partir du nœud courant,
peu importe où ils sont
. Sélectionne le nœud courant
.. Sélectionne le parent du nœud courant
@ Sélectionne tous les attributs du nœud courant
comment() Sélectionne tous les commentaires
node() Sélectionne tous les nœuds
id(‘val’) Sélectionne l’élément d'identifiant val

10
A.ZELLOU
Sélection des nœuds

n Exemples d’expressions de sélection :


n (/) représente toujours le chemin absolu pour un élément.

Expression Résultat
biblio Sélectionne l'élément biblio
/biblio Sélectionne l'élément racine biblio
biblio/livre Sélectionne l’élément livre qui est fils de biblio

//livre Sélectionne tous les éléments livre peu importe où ils se trouvent
dans le document
biblio//livre Sélectionne tous les éléments livre qui sont les descendants de
l'élément biblio, peu importe le chemin
//@lang Sélectionne tous les attributs qui sont nommés lang

11
A.ZELLOU
Prédicats

n Ils sont utilisés pour trouver un nœud spécifique.


n Toujours entre deux crochets.
Expression Résultat
/biblio/livre[1] Sélectionne le premier élément livre, fils de l'élément
racine biblio.
/biblio/livre[first()] Sélectionne le premier élément livre, fils de l'élément
racine biblio.
/biblio/livre[last()-1] Sélectionne l'avant-dernier élément livre, fils de
l'élément racine biblio.
/biblio/livre[position()<3] Sélectionne les deux premiers éléments livre, fils de
l'élément racine biblio.
//titre[@lang] Sélectionne tous les éléments titre qui ont un attribut
lang

12
A.ZELLOU
Prédicats

n Ils sont utilisés pour trouver un nœud spécifique.


n Toujours entre deux crochets.
Expression Résultat
//titre[@lang=‘En'] Sélectionne tous les éléments titre qui ont un
attribut lang avec une valeur En
/biblio/livre[prix>30] Sélectionne tous les éléments livre de l'élément
racine biblio qui ont un élément prix d'une valeur
supérieure à 35
/biblio/livre[prix>35]/titre Sélectionne tous les éléments titre de l'élément livre
de l'élément biblio racine qui ont un élément prix
d'une valeur supérieure à 35

13
A.ZELLOU
Prédicats

n XPath peut aussi être utiliser pour sélectionner des nœuds


inconnus.
Expression Description
* Tout nœud
node()
@* Tout attribut

n Exemples :
Expression Résultat
/biblio/* Tous les nœuds fils de l'élément racine biblio
//* Tous les éléments du document
//titre[@*] Tous les éléments titre qui ont un attribut

14
A.ZELLOU
Sélectionner plusieurs chemins

n Par utilisation de l'opérateur.


n Exemples :

Expression Résultat
//titre | //prix Sélectionner tous les éléments titre et prix du
document

//livre/titre | //livre/prix Sélectionner tous les éléments titre et prix de


l'éléments livre

/biblio/livre/titre | //prix Sélectionner tous les éléments titre fils des éléments
livre fils de l'élément racine biblio et tous les
éléments prix du document

15
A.ZELLOU
Les Axes XPath

n Syntaxe alternatifve: Un axe défini un ensemble de nœuds.


Axe Résultat
self Sélectionne tous l’élément courant
parent Sélectionne tous l’élément parent du nœud courant
ancestor Sélectionne tous les ancêtres du nœud courant (parent, grand parent,
etc.)
ancestor-or-self Sélectionne tous les ancêtres du nœud courant et le nœud courant aussi
attribute Sélectionne tous les attributs du nœud courant
child Sélectionne tous les fils du nœud courant
descendant Sélectionne tous les descendants du nœud courant
descendant-or-self Sélectionne tous les descendants du nœud courant et le nœud courant
aussi
following Sélectionne le reste du document après la fermeture de la balise
courante
16
preceding Sélectionne le contenu du document avant la balise courante
A.ZELLOU
Accès par Axe

Introduction n L’accès par axe est une expression de sélection qui


se compose de :
Expression de n Un axe qui défini la relation entre le nœud
chemin
sélectionné et le nœud courant.

Sélection des
n Un nœud de position.
nœuds
n Zéro ou plusieurs prédicats.

Prédicats
n L’expression a la syntaxe suivante :
n axe::nœud_de_position[prédicat]
Axes Xpath Ou :
n direction::sélecteur[predicat]
Exemple
n X::Y Signifie “select Y from X”
Atelier 17
A.ZELLOU
Accès par Axe

Introduction n Axe ou Directions :


n parent, ancestor, ancestor-or-self
Expression de
chemin n child, descendant, descendant-or-self
n preceding, preceding-sibling
Sélection des
nœuds n following, following-sibling
n self, attribute, namespace
Prédicats
n Sélecteur :
Axes Xpath n nom de nœud sélectionné (élément ou
@attribut)
Exemple n Prédicat :
n [Fonction(nœud) = valeur]
Atelier 18
A.ZELLOU
Accès par Axe

n Exemple :
Exemple Résultat
child::livre Sélectionner tous les fils du nœud livre
attribute::lang Sélectionner l'attribut lang du nœud courant
child::* Sélectionner tous les fils du nœud courant
attribute::* Sélectionner tous les attributs du nœud courant
child::text() Sélectionner le contenu (texte) du nœud fils du nœud courant
child::node() Sélectionner tous les nœuds fils du nœud courant

19
A.ZELLOU
Accès par Axe

n Exemple :

<library>
<livre> //chapter[2]/self::*
<chapter/>
<chapter> //chapter[2]/preceding::*
<section>
<paragraph/>
<paragraph/> //chapter[2]/following::*
</section>
</chapter> //chapter[2]/ancestor::*
<chapter/>
</livre>
<livre/> //chapter[2]/descendant::*
</library>

20
A.ZELLOU
Accès par Axe

n Exemple :

Exemple Résultat
ancestor::livre Sélectionner tous les ancêtres du nœud livre

descendant::livre Sélectionner tous les descendants du nœud livre


ancestor-or- Sélectionner tous les ancêtres du nœud livre ainsi que livre
self::livre
descendant-or- Sélectionner tous les descendants du nœud livre ainsi que livre
self::livre

21
A.ZELLOU
Fonctions Xpath

n Quelques fonctions:
n Node-set : last(), position(), count( node-set ), id( string ),
name( node-set ), namespace-uri( node-set ).
n String : concat($s1,...,$sn), starts-with($a,$b),
contains($a,$b), substring-before($a,$b), substring-
after($a,$b), substring($a,$n,$l), string-length($a), normalize-
space($a), translate($a,$b,$c).
n Boolean et Number : not($b), sum($s), floor($n), ceiling($n),
round($n).

22
A.ZELLOU
Implémentations Xpath

n libxml2 Free C library for parsing XML documents, supporting


XPath.
n java.xml.xpath Java package, included with JDK versions starting
from 1.5.
n System.Xml.XPath .NET classes for XPath.
n XML::XPath Free Perl module, includes a command-line tool.
n DOMXPath PHP class for XPath, included in PHP5.
n PyXML Free Python library for parsing XML documents,
supporting XPath.

23
A.ZELLOU
Exemples d’expressions
Xpath
Exemples

n auteur
n Tous les éléments <auteur> dans le contexte actuel.
n ./auteur
n Tous les éléments <auteur> fils du contexte actuel.
n Expression équivalente à l'expression de la ligne précédente.
n /biblio
n L'élément racine (<biblio>) de ce document.
n //auteur
n Tous les éléments <auteur> du document.

25
A.ZELLOU
Exemples

n auteur/first-name
n Tous les éléments <first-name> qui sont des enfants d'un
élément <auteur>
n biblio//titre
n Tous les éléments <titre> à un ou plusieurs niveaux de
profondeur dans l'élément <biblio> (descendants arbitraires).
n biblio/*/titre
n Tous les éléments <titre> qui sont des petits-enfants
d'éléments <biblio>.

26
A.ZELLOU
Exemples

n biblio//livre/x//y
n Tous les éléments <y> situés n'importe où à l'intérieur
d'enfants <x> d'éléments <livre>, n'importe où à l'intérieur de
l'élément <biblio>
n .//titre
n Tous les éléments <titre> à un ou plusieurs niveaux de
profondeur dans le contexte actuel.
n auteur/*
n Tous les éléments qui sont les enfants d'éléments <auteur>.

27
A.ZELLOU
Exemples

n livre/*/last-name
n Tous les éléments <last-name> qui sont des petits-enfants
d'éléments <livre>.
n *[@specialty]
n Tous les éléments avec l'attribut specialty.
n prix/@exchange
n L'attribut exchange sur des éléments <prix> dans le contexte
actuel.
n prix/@exchange/total
n Retourne une collection de nœuds vide, car les attributs ne
contiennent pas d'éléments enfants.
28
A.ZELLOU
Exemples

n livre[@style]
n Tous les éléments <livre> avec des attributs style, dans le
contexte actuel.
n auteur[1]
n Le premier élément <auteur> dans le nœud de contexte actuel.
n auteur[first-name][3]
n Le troisième élément <auteur> ayant un enfant <first-name>.
n livre[last()]
n Le dernier élément <livre>

29
A.ZELLOU
Exemples

n livre/auteur[last()]
n Le dernier élément <auteur> de l’élément <livre>
n (livre/auteur)[last()]
n Le dernier élément <auteur> du dernier élément <livre>
n livre[livre]
n Tous les éléments <livre> qui contiennent au moins un
élément enfant <livre>.
n livre[livre]/titre
n Tous les éléments <titre> qui sont des enfants d'éléments
<livre> contenant au moins un élément enfant <livre>.

30
A.ZELLOU
Exemples

n livre[excerpt]/auteur[degree]
n Tous les éléments <auteur> qui contiennent au moins un
élément enfant <degree> et qui sont des enfants d'éléments
<livre> contenant au moins un élément <excerpt>.
n livre[@style = /biblio/@specialty ]
n Tous les éléments <livre> dont la valeur de l'attribut style est
égale à celle de l'attribut specialty de l'élément <biblio> à la
racine du document.
n livre[auteur/degree]
n Tous les éléments <livre> qui contiennent des enfants
<auteur> contenant à leur tour au moins un enfant <degree>.

31
A.ZELLOU
Exemples

n auteur[degree][award] ou auteur[degree and award]


n Tous les éléments <auteur> qui contiennent au moins un
élément enfant <degree> et au moins un élément enfant
<award>.
n auteur[(degree or award) and publication]
n Tous les éléments <auteur> qui contiennent au moins un
enfant <degree> ou <award> et au moins un enfant
<publication>.
n auteur[degree and not(publication)]
n Tous les éléments <auteur> qui contiennent au moins un
élément enfant <degree> et ne contiennent pas d'éléments
enfants <publication>.
32
A.ZELLOU
Exemples

n auteur[not(degree or award) and publication]


n Tous les éléments <auteur> qui contiennent au moins un
élément enfant <publication> et ne contiennent pas d'éléments
enfants <degree> ni <award>.
n degree[@from != "Harvard"]
n Tous les éléments <degree> dont l'attribut from n'est pas égal
à "Harvard".
n auteur[last-name = "Bob"]
n Tous les éléments <auteur> qui contiennent au moins un
élément enfant <last-name> avec la valeur Bob.

33
A.ZELLOU
Exemples

n /*/*/*/paragraph
n Sélectionne chaque paragraphe qui a trois parents vers
l’élément racine
n //chapter[not(@num)]
n Sélectionne tous les chapitres sui n’ont pas d’attribut num
n //chapter[@*]
n Sélectionne tout chapitre qui a un attribut
n //chapter[not(@*)]
n Sélectionne tout chapitre qui n’a pas d’attribut

34
A.ZELLOU
Exemples

n auteur[last-name[1] = "Bob"]
n Tous les éléments <auteur> dont le premier élément enfant
<last-name> présente la valeur Bob.
n Equivalente à l'expression précédente.
n auteur[last-name [position()=1]= "Bob"]
n Tous les éléments <auteur> dont le premier élément enfant
<last-name> présente la valeur Bob.
n auteur[. = "Matthew Bob"]
n Tous les éléments <auteur> dont la valeur est Matthew Bob.
n auteur[last-name = "Bob" and ../prix &gt; 50]
n Tous les éléments <auteur> dont un élément enfant <last-
name> a la valeur Bob et un élément frère <prix> a une valeur
35
supérieure à 50. A.ZELLOU
Exemples

n livre[position() &le; 3]
n Les trois premiers livres (1, 2, 3).
n auteur[not(last-name = "Bob")]
n Tous les éléments <auteur> qui ne contiennent pas d'éléments
enfants <last-name> dont la valeur est Bob.
n auteur[first-name = "Bob"]
n Tous les éléments <auteur> qui contiennent au moins un
élément enfant <first-name> dont la valeur est Bob.
n auteur[* = "Bob"]
n Tous les éléments auteur contenant tout élément enfant dont la
valeur est Bob.
36
A.ZELLOU
Exemples

n auteur[last-name = "Bob" and first-name = "Joe"]


n Tous les éléments <auteur> contenant un élément enfant <last-
name> avec la valeur Bob et un élément enfant <first-name>
avec la valeur Joe.
n my:livre
n L'élément <livre> de l'espace de noms my.
n my:*
n Tous les éléments de l'espace de noms my.

37
A.ZELLOU
Merci

Vous aimerez peut-être aussi