Vous êtes sur la page 1sur 38

Programmation web Avancée

Chap 4: XPATH-XSL(T)

Par O. Boutkhoum

Faculté des Sciences – El Jadida SMI S6, 2022/2023


XSL(T)-XPATH
Structure d’un fichier XML
➢ Un document XML se compose de 3 fichiers :

◼ Le fichier XML stocke les données du document sous forme d’un arbre

◼ DTD ( Data Type Definition ) ou Schémas XML définit la structure du fichier XML

◼ La feuille de style définit la mise en forme des données du fichier xml

2
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
XSL(T)-XPATH
 XSL signifie eXtensible Stylesheet Langage, ou langage extensible de feuille de style.
 XSL recouvre en fait deux langages:

◼ XPath (XML Path Language) est utilisé pour parcourir les éléments et les attributs dans
les documents XML.

◼ XSLT signifie eXtensible Stylesheet Langage Transformation:

 Utilisé pour transformer des documents XML

 Utilise XPath pour rechercher des informations dans un document XML.

3
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
XPATH
Introduction:
XPath est une spécification (un standard du W3C) fondée sur l'utilisation de chemin d'accès permettant
de naviguer à travers des éléments et des attributs au sein du document XML:

◼ Langage de navigation au sein des documents xml.


◼ Etablit un arbre de nœuds correspondant au document XML. Les types de nœuds peuvent être
différents : nœud d'élément, nœud d'attribut et nœud de texte.
◼ Permet d’écrire des expressions permettant d'accéder directement aux informations souhaitées sans
avoir à parcourir tout l'arbre XML.
◼ Une des expressions les plus importantes dans le standard XPath est le chemin de localisation.
 Cette expression sélectionne un ensemble de noeuds à partir d'un noeud contextuel.
XPath 1.0 (Novembre1999).
◼ XPATH est une recommandation W3C: XPath 2.0 (Janvier 2007).
XPath 3.0 (Avril 2014).
XPath 3.1 (mars 2017).

4
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XPATH
Chemin de localisation
 Un chemin de localisation peut être de type absolu ou relatif.
◼ Dans le cas où il est de type absolu, il commence toujours par le signe / indiquant la racine du document XML ;
◼ Dans le cas où il est de type relatif, le nœud de départ est le nœud contextuel courant.
Exemple:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<repertoire>
<personne sexe="masculin">
<nom>DOE</nom>
<prenom>John</prenom>
<telephones>
<telephone type="fixe">01 02 03 04 05</telephone>
<telephone type="portable">06 07 08 09 10</telephone>
</telephones>
</personne>
</repertoire>

5
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XPATH
Chemin de localisation: syntaxe
 La syntaxe de composition d'un chemin de localisation peut être de type abrégé ou non abrégé.
 Un chemin de localisation est composé de trois parties :
axe::nœud[predicat][predicat]...[predicat]
◼ un axe, définissant le sens de la relation entre le noeud courant et le jeu de noeuds à localiser;
◼ un noeud spécifiant le type de noeud à localiser;
◼ 0 à n prédicats permettant d'affiner la recherche sur le jeu de noeuds à récupérer.
◼ Par exemple, dans le chemin child::section[position()=1],
 child est le nom de l'axe,

 section le type de noeud à localiser (élément ou attribut)

 [position()=1] est un prédicat. Les doubles :: sont obligatoires dans ce type de syntaxe (non abrégé).

◼ Dans cet exemple, on cherche dans le noeud courant, un noeud section qui est le premier noeud de
son type.
6
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XPATH
Chemin de localisation: Axes

Nom Axe résultat


child contient les enfants directs du noeud courant. L'axe par défaut est l'axe child.
descendant contient les descendants du noeud courant. Un descendant peut être un enfant, un petit-
enfant...
parent contient le parent du noeud courant, s'il y en a un.
ancestor contient les ancêtres du noeud courant. Cela comprend son père, le père de son père...
following oriente la recherche vers les nœuds suivant le nœud courant
preceding oriente la recherche vers les nœuds précédant le nœud courant
attribute contient les attributs du nœud courant.
self contient seulement le noeud courant
descendant-or-self contient le nœud courant et ses descendants
ancestor-or-self contient le nœud courant et ses ancêtres. Cet axe contiendra toujours le noeud racine

7
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XPATH
Chemin de localisation: Sélection des nœuds
XPath utilise des expressions de chemin pour sélectionner des nœuds dans un document XML. Les plus utilisé sont :
Expression description
nomNoeud Sélectionne tous les nœuds (fils de l'élément courant) avec le nom "nomNoeud".

Sélectionne tous les enfants du noeud courant.


* Par exemple, */paragraphe sélectionne tous les petits-fils paragraphe du noeud courant.
/ Sélectionne à partir du nœud racine
// Sélectionne les nœuds du document à partir du nœud courant qui correspondent à la sélection, peu importe où ils
se trouvent:
Par exemple, section//paragraphe sélectionne tous les éléments paragraphe descendant d'un élément
section fils direct du noeud courant
. Sélectionne le noeud courant:
Par exemple, .//paragraphe sélectionne tous les descendants paragraphe du noeud courant.
.. Sélectionne le parent du noeud courant, s'il y en a un
@ Sélectionne les attributs. Ex. section[@titre='Introduction’]: sélectionne les éléments section dont l'attribut
titre a pour valeur Introduction.
8
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XPATH
Chemin de localisation: Exemples des expressions de localisation en se basant sur le document xml suivant:
Exemple Résultat <?xml version="1.0" encoding="UTF-8"?>
<biblio>
child::livre Sélectionne tous les nœuds livre qui sont des enfants du nœud actuel. <livre>
attribute::lang Sélectionne l'attribut lang du nœud actuel. (abréviation : @lang) <titre lang="en">Harry Potter</titre>
<prix>29.99</prix>
child::* Sélectionne tous les éléments enfants du nœud actuel. </livre>
(abréviation : *) <livre>
<titre lang="en">Learning XML</titre>
attribute::* Sélectionne tous les attributs du noeud actuel. <prix>39.95</prix>
(abréviation : @*) </livre>
</biblio>
child::text() Sélectionne tous les nœud enfants de type texte du noeud actuel.
child::node() Sélectionne tous les enfants du noeud actuel. Node() oriente la recherche N.B:
vers tous les types de nœuds (éléments, commentaires, etc.) - child est l'axe par défaut. Donc, un chemin

descendant::livre Sélectionne tous les nœuds livres descendants du nœud actuel. de localisation livre/para est un raccourci pour
(abréviation: //livre) child::livre/child::para.
ancestor::livre Sélectionne tous les nœuds livres ancêtres du nœud actuel. - Il en est de même pour les attributs.
Par exemple, para[@type="test"] est un
ancestor-or- Sélectionne tous livres ancêtres du nœud actuel - ainsi que le nœud
self::livre courant s'il s'agit d'un nœud de livre raccourci pour child::para[attribute::type="test"]

self::livre sélectionne le noeud contextuel si c'est un élément livre, et rien dans le 9


cas contraire
Omar Boutkhoum
Omar – boutkhoum.o@ucd.ac.ma
Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
XPATH
Chemin de localisation: Prédicats
 Chaque expression est évaluée et le résultat est un booléen.
 Par exemple, section[3] est équivalent à section[position()=3]. => chacune d'entre elles produit un booléen

Nom du prédicat Description


number(object) Traduire l'objet sous la forme d'un nombre. renvoie NaN si l'objet ne
représente pas un nombre.
count(nœuds) permet de compter le nombre de nœuds
sum(nœuds) renvoie la somme des noeuds après les avoir transformés en nombre.
last() permet de sélectionner le dernier nœud d'une liste
position() permet d'affiner la recherche en fonction de la position d'un nœud
string(objet) cette fonction convertit un objet en chaîne de caractères
concat(chaine1, …, chaineN): retourne une chaîne résultant de la concaténation des arguments
10
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XPATH
Autres fonctions XPath
 Manipulation de booléens
◼ boolean(objet): vraie si l'objet est égale à la constante « true ».
◼ True() et false(): Renvoie la valeur booléenne vraie ou faux
◼ lang(lang): Renvoie true ou false si la langue du nœud actuel correspond à celle de la langue spécifiée ou non. La
langue du noeud contextuel est déterminée par la valeur de l'attribut xml:lang attribut du noeud contextuel.
 Exemple: Lang ("en") est vrai pour <p xml:lang="en" > ... </ p>.

 Manipulation de nombres
◼ floor(nombre) : retourne le plus grand entier inférieur à l'argument passé à la fonction (plus grand entier <= nombre).
◼ ceiling(nombre) : retourne le plus petit entier supérieur à l'argument passé à la fonction (plus petit entier >= nombre).
◼ round(nombre) : retourne l'entier le plus proche de l'argument passé à la fonction (entier le plus proche de nombre).

11
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XPATH
Quelques opérateurs XPath

Operator Description Example


| Calcule deux ensembles de nœuds //book | //cd
= != < <= > >= Comparaisons générales book/bookstore / [price > 35,00] / title
+ - * div mod Opérations arithmétiques produit[(prix div 10) = (prix mod 10)]
not(), and et or Opérateurs logiques section[not(@titre)] sélectionne les éléments section qui
n'ont pas d'attribut titre.

12
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XPATH
Exemples de sélections d’éléments avec XPath :
 Lignée de noms :
◼ /cars/car
◼ /cars/car/year
◼ //year
 Présence d’un sous-élément (fils) : /cars/car[country]/year
 Contrainte sur la valeur d’un élément :
◼ /cars/car[year=2000]
◼ /cars/car[year!=2000]
◼ /cars/car[year=2000]/year
 Contrainte sur la valeur d’un attribut : /cars/car[@mark="Peugeot"]
 Position dans la fratrie :
◼ /cars/car[1]
◼ /cars/car[last()]
◼ /cars/car[last() -1]
 À tester : /*
 À tester : //*
 À tester : //@*
13
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>

XPATH
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
Exemple 1: Nous allons utiliser le document XML "books.xml" dans les <price>30.00</price> books.xml
exemples ci-dessous: </book>
<book category="children">
1.Sélectionner tous les titres. <title lang="en">Harry Potter</title>
/bookstore/book/title ou /bookstore//title ou ... <author>J K. Rowling</author>
<year>2005</year>
2.Sélectionner le titre du premier livre <price>29.99</price>
/bookstore/book[1]/title </book>
<book category="web">
3.Sélectionner tous les prix <title lang="en">XQuery Kick Start</title>
/bookstore/book/price[text()] ou /bookstore/book/price ou … <author>James McGovern</author>
<author>Per Bothner</author>
4.Sélectionner les nœuds de prix avec un prix> 35 <author>Kurt Cagle</author>
/bookstore/book[price>35]/price <author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
5.Sélectionner les noeuds de titre avec un prix> 35 <year>2003</year>
/bookstore/book[price>35]/title <price>49.99</price>
</book>
6.Sélectionner les nœuds de titre dont la catégorie du livre est "cooking" <book category="web">
➢/bookstore/book[attribute::category="cooking"]/title <title lang="en">Learning XML</title>
➢/bookstore/book[@category="cooking"]/title <author>Erik T. Ray</author>
<year>2003</year>
➢/descendant::*[attribute::category=“cooking"]/title <price>39.95</price>
</book>
</bookstore> 14
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XPATH
➢ Exemple 2: Considérons le fichier XML suivant, l’élément courant étant l’élément racine A :
<A>
<B> <C>C1</C> </B>
<B> <C>C2</C> </B>
<D> <C>C3</C> </D>
<E> <B> <C>C4</C> </B> </E>
<B> <E> <C>C5</C> </E> </B>
</A>

◼ */C => renvoie C1, C2 et C3

◼ B/C => renvoie C1 et C2

◼ B//C => renvoie C1, C2 et C5

◼ .//B/C => renvoie C1, C2 et C4

15
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Introduction
 XSLT (eXtensible Stylesheet Language Transformations) est le langage de feuille de style recommandé
pour XML.

 XSLT est la partie la plus importante de XSL.


 Permet de transformer des documents XML en d'autres formats (comme transformer XML en HTML).
 XSLT s'appuie sur XPath pour sélectionner des informations à transformer.
 Un fichier XSLT étant un fichier XML, il doit respecter les normes de syntaxe de ce format.

16
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Introduction: Question de style

Intérêt de séparer le fond et la forme d’un document (rappel) :


 Pour se focaliser soit sur les données, soit sur leur présentation
◼ L’ingénierie des connaissances et la publication sont deux métiers différents
 Pour restructurer et présenter les données de différentes manières
◼ En fonction du type de terminal (écran de PC, imprimante)
◼ En fonction du type de sortie (textuelle, graphique, sonore, mixte)
◼ En fonction de la charte graphique (sobre, colorée, délirante)
17
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
 Structure d'un document XSLT
• Le prologue <xsl:transform
<?xml version="1.0" encoding="UTF-8"?> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
• Élément racine <xsl:stylesheet version="1.0">
<xsl:stylesheet ou xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
<xsl:transform version="1.0">
• Déclaration de l'espace <xsl:output method="html" encoding="UTF-8"/>
de noms XSL associé au
<xsl:template match="/">
préfixe xsl. • <xsl:output /> décris le document produit à l'issue
……. des différentes transformations (optionnel).
1.0: novembre 1999 </xsl:template>
2.0: janvier 2007
3.0: juin 2017 </xsl:stylesheet>

 Les feuilles de styles XSLT sont basés sur des modèles (templates) de transformation que l'on note :
<xsl:template match="/">.

 Un template exprime des règles à appliquer à un document


 L'attribut match="/" indique que ce modèle s'applique à la racine du document XML.
18
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
 Principe de fonctionnement: Les flux d'une transformation XSLT

: saxon, …

19
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
 Référencer un document XSLT
Le référencement d'un document XSLT se fait via une instruction de traitement à placer sous
le prologue et avant l'élément racine du document XML à transformer:
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl" ?>

✓ définis le type du document que ✓ indique l'URI du document que


nous souhaitons référencer: l'on souhaite référencer.
Dans notre cas, puisqu'il s'agit
d'un document XSLT, il convient
de renseigner la clef "text/xsl".

20
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"

XSLT <catalog>
href="cdcatalog.xsl" ?>

<cd>
<title>Empire Burlesque</title>
 Exemple : <artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
Exemple d'un document XML (cdcatalog.xml) lié à une feuille de style <price>10.90</price>
<year>1985</year>
XSL à l'aide d'une instruction de traitement (xml-stylesheet).
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
<cd>
<title>Greatest Hits</title>
<artist>Dolly Parton</artist>
<country>USA</country>
<company>RCA</company>
<price>9.90</price>
<year>1982</year>
</cd>
</catalog> 21
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
 Exemple: xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
Et voici la feuille de style XSL associée: cdcatalog.xsl <html>
<body>
<h2>My CD Collection</h2>
Résultats de la transformation: <table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
✓ La valeur par défaut de la méthode de <td><xsl:value-of select="artist"/></td>
</tr>
l’élément <xsl:output …/> est XML (mais si
</xsl:for-each>
le premier enfant du nœud racine est <html> </table>
et qu'il n'y a pas de nœuds de texte </body>
</html>
précédents, la valeur par défaut est HTML)
</xsl:template>
</xsl:stylesheet> 22
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Eléments de XSLT: Les éléments de XSLT sont des instructions qui sont exécutées par le processeur XSLT.
➢ <xsl:value-of>
Cet élément permet d'insérer la valeur d'un noeud dans la transformation
Syntaxe: <xsl:value-of select="nom_element" />
◼ permet d'extraire la valeur d'un élément XML ou la valeur de ses attributs.
◼ possède un attribut select auquel il convient de renseigner une expression XPath permettant alors de sélectionner les
informations à extraire :
<xsl:value-of select="expression XPath" />

Exemple 1: contenu d’un élément


<p> Numéro : <xsl:value-of select="repertoire/personne[nom='POPPINS']/telephones/telephone[@portable]”/> </p>

Exemple 2: contenu d’un attribut (on le fait précéder du caractère @).


◼ Par exemple, <xsl:value-of select="paragraphe/@titre"/> permet l'affichage du titre de l'élément paragraphe fils de
l'élément courant.

23
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Eléments de XSLT
<xsl:element>
 Cet élément insère un nouvel élément dans la transformation. Le nom de l'élément est donné par l'attribut name.
L'utilisation de cet élément est de la forme :

<xsl:element name="nomElement" useattribute-sets="jeuattr"> </xsl:element>


◼ name correspond au nom de l'élément à créer.

◼ use-attribute-sets correspond au jeu d'attributs à associer à l'élément créé.


Par exemple :

<xsl:for-each select="catalog/cd">
<xsl:element name="singer">
<xsl:value-of select="artist" />
</xsl:element>
</xsl:for-each>

24
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Eléments de XSLT
<xsl:attribute>
 Cet élément définit un attribut et l'ajoute à l'élément résultat de la transformation. L'utilisation de cet élément est de
la forme :
<xsl:attribute name="nom">valeur</xsl:attribute>
◼ name correspond au nom de l'attribut à ajouter dans le contexte courant.
◼ valeur correspond à la valeur à lui donner. Par exemple :
<image>
<xsl:attribute name="src">test.gif</xsl:attribute>
</image>
◼ Cet exemple permet d'ajouter à l'élément image l'attribut src et de lui affecter la valeur test.gif, ce qui a pour
effet de produire en sortie l'élément suivant :
<image src="test.gif"></image>
◼ On aurait pu, de manière tout à fait équivalente, écrire
<xsl:element name="image">
<xsl:attribute name="src">test.gif</xsl:attribute>
</xsl:element>
25
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Eléments de XSLT
<xsl:for-each>
 Crée une boucle dans laquelle sont appliquées des transformations.
 Son utilisation est de la forme :
<xsl:for-each select="jeunoeud">
…..
</xsl:for-each>
◼ select correspond au jeu de noeuds devant être parcouru par la boucle.
Exemple :
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
26
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Eléments de XSLT
<xsl:apply-templates>
 Permet d’appliquer les transformation à l'élément actuel ou aux nœuds enfants de l'élément actuel en
utilisant les templates définis.
 Exemple:
<xsl:template match="cd">
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</xsl:template>
<xsl:template match="title">
Title: <span style="color:#ff0000"><xsl:value-of select="."/></span>
<br />
</xsl:template>
<xsl:template match="artist">
Artist: <span style="color:#00ff00"><xsl:value-of select="."/></span>
<br />
</xsl:template>
27
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Eléments de XSLT
<xsl:sort>
 Cet élément permet d'effectuer un tri sur un jeu de nœuds (trier la sortie).
 Il doit être placé soit dans un élément <xsl:for-each> soit dans un élément <xsl:apply-templates>.
 L'utilisation de cet élément est de la forme :
<xsl:sort select="noeud" data-type="text | number | elt" order="ascending | descending" lang="nmtoken"
case-order="upperfirst | lower-first" />
◼ select permet de spécifier un noeud comme clé de tri.
◼ data-type correspond au type des données à trier. Dans le cas où le type est number, les données sont
converties puis triés.
◼ order correspond à l'ordre de tri. Cet attribut vaut ascending ou descending.
◼ lang spécifie quel jeu de caractères utiliser pour le tri ; par défaut, il est déterminé en fonction des
paramètres système.
◼ case-order indique si le tri a lieu sur les majuscules ou minuscules en premier.

28
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Eléments de XSLT
<xsl:sort>
Exemple :
<ul>
<xsl:for-each select="livre">
<xsl:sort select="auteur" order="descending" />
<li><b><xsl:value-of select="auteur" /></b><br />
<xsl:value-of select="titre" /></li>
</xsl:for-each>
</ul>
Dans cet exemple, la liste des livres est classée dans l'ordre alphabétique décroissant des noms d'auteurs.

29
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Eléments de XSLT
<xsl:if>
 Utilisé pour mettre un test conditionnel sur le contenu du fichier XML. Il est possible de tester:
◼ La présence d'un attribut,
◼ La présence d'un élément,
◼ Si un élément est bien le fils d'un autre, Exemple d'utilisation:
◼ Les valeurs des éléments et attributs.
<ul>
 L'utilisation de cet élément est de la forme : <xsl:for-each select="livre">
<xsl:if test="condition"> <li>
Action en sortie si la condition est vrai
<b><xsl:value-of select="auteur" /><br /></b>
<xsl:value-of select="titre" />
</xsl:if> </li>
<xsl:if test="@langue=‘ fr‘ ">
<li>Ce Livre est en français</li>
</xsl:if>
</xsl:for-each>
</ul>
30
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Eléments de XSLT
<xsl:choose>
 L'élément <xsl: Choose> est utilisé conjointement avec <xsl: when> et <xsl:otherwise> pour définir une liste de choix
et affecter à chaque choix une transformation différente.
◼ Chaque choix/test est défini par un élément <xsl:when>
◼ et un traitement par défaut peut être spécifié grâce à l'élément <xsl:otherwise>.
 Exemple d'utilisation
<ul>
<xsl:for-each select="livre">
<li>
<b><xsl:value-of select="auteur" /><br /></b>
<xsl:value-of select="titre" />
<xsl:choose>
<xsl:when test="@langue='fr’ ">Ce livre est en français.</xsl:when>
<xsl:when test="@langue=‘en’ "> Ce livre est en anglais. </xsl:when>
<xsl:otherwise> Ce livre est dans une langue non répertoriée. </xsl:otherwise>
</xsl:choose>
</li>
</xsl:for-each>
</ul> 31
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Eléments de XSLT
<xsl:variable>
 L'élément <xsl:variable> sert à créer les variables dans XSLT. Il possède les attributs suivants :
◼ name : cet attribut est obligatoire. Il spécifie le nom de la variable.
◼ select : Optionnel. Définit la valeur de la variable.
 Par exemple :

<xsl:variable name="auteur" select=“ ‘ Victor Hugo ‘ " />


<xsl:variable name="nb" select="livre/tome/@page" />
<xsl:variable name="header"><tr bgcolor="#9acd32"><th>Title</th><th>Artist</th></tr>
</xsl:variable>
• On notera la présence des guillemets imbriqués quand il s'agit d'affecter une chaîne de
caractères à une variable.
• Une variable est appelée en étant précédée du caractère $ :
<xsl:value-of select="$nb" />.
• On peut utiliser une variable pour éviter la frappe répétitive d'une chaîne de caractères,
et pour faciliter la mise à jour de la feuille de style.
32
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT
Eléments de XSLT
<xsl:call-template>
 L'élément <xsl:call-template> appelle un template nommé via l’attribut name.
 Exemple

<xsl:template name="separateur">
<hr />
<img src="ligne.gif" alt="séparation” width="150" height="2" />
<hr />
</xsl:template>
Il suffit alors de l'appeler avec
<xsl:call-template name="separateur"/>

33
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSLT <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
<cd>
 Exemple d’application 1: <title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
Proposer une feuille de style xsl pour le document XML cdcatalog.xml <company>Columbia</company>
<price>10.90</price>
permettant d’obtenir les résultats ci-dessous: <year>1985</year>
</cd>
<cd>
cdcatalog.xml
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
Résultats à afficher: <year>1988</year>
</cd>
<cd>
<title>Greatest Hits</title>
<artist>Dolly Parton</artist>
<country>USA</country>
<company>RCA</company>
<price>9.90</price>
<year>1982</year>
</cd>
</catalog>
34
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"

XSLT xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
 Correction: <body>
<center>
<h2>My CD Collection</h2>
la feuille de style XSL cdcatalog.xsl proposée: <table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
<th>Année de publication</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
<td><xsl:value-of select="year"/></td>
</tr>
</xsl:for-each>
</table>
</center>
</body>
</html>
</xsl:template>
</xsl:stylesheet> 35
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
<?xml version="1.0" encoding="UTF-8"?>
<galeries xs:noNamespaceSchemaLocation="test.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">

XSLT <galerie id="1" adresse="3 rue du bourg 22250 TREMEUR">


<gerant>Jean CAISSE</gerant>
<contenu>
 Exemple d’application 2: <type>sculpture</type>
<auteur>Rodin</auteur>
Proposer une feuille de style xsl <titre>Le penseur</titre>
permettant d’obtenir les résultats <prix>123456789.123</prix>
ci-dessous: </contenu>
<contenu>
? <type>peinture</type>
<auteur>Herby Cyrille</auteur>
<titre>Ma peinture</titre>
</contenu>
</galerie>
<galerie id="2" adresse="24 boulvard de Sévigné 75000 PARIS">
<gerant>Marc MOISSA</gerant>
<contenu>
<type>sculpture</type>
<auteur>Tony Williams</auteur>
<prix>123.25</prix>
</contenu>
<contenu>
<type>canevas</type>
<auteur>Mamy HERBY</auteur>
<titre>Mon coussin</titre>
<prix>12</prix>
</contenu>
</galerie>
36
– boutkhoum.o@ucd.ac.ma </galeries> Prog. web Avancée – SMI S6 / F.S El Jadida
Omar Boutkhoum
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. web Avancée – SMI S6 / F.S El Jadida
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0">

XSLT
<xsl:template match="/">
<html>
<body>
 Correction: <h2>My galeries</h2>
<table border="1">
<xsl:for-each select="galeries/galerie">
<tr bgcolor="#21610B">
<th>gerant de la galerie:<xsl:value-of select="@id"/></th>
<th>Adresse :</th></tr>
<tr>
<td><xsl:value-of select="gerant"/></td>
<td><xsl:value-of select="@adresse"/></td>
</tr>
<tr bgcolor="#9acd32">
<th>Titre</th><th>Auteur</th>
</tr>
<xsl:for-each select="contenu">
<tr>
<td><xsl:value-of select="titre"/></td>
<td><xsl:value-of select="auteur"/></td>
</tr>
</xsl:for-each>
<tr bgcolor="#3333333"><td colspan="3"></td></tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet> 37
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida
XSL(T)-XPATH

Présentation à prendre en considération pour le 05/04/2023:

1. XQuery + JSON
2. XQuery + Relax NG

38
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma
Omar Boutkhoum – boutkhoum.o@ucd.ac.ma Prog. webProg.
Avancée SMI S6–/ SMI
web –Avancée F.S ElS6Jadida
/ F.S El Jadida

Vous aimerez peut-être aussi