• Aucun résultat trouvé

Cours XSLT pour les nuls – Cours et formation gratuit

N/A
N/A
Protected

Academic year: 2022

Partager "Cours XSLT pour les nuls – Cours et formation gratuit"

Copied!
17
0
0

Texte intégral

(1)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 1

XSLT

Un exemple pas-à-pas

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 2

Exemple

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:value-of select="notice/titre" /></TITLE>

</HEAD>

<BODY>

<H1><xsl:value-of select="notice/titre" /></H1>

<HR/>

</BODY>

</HTML>

</xsl:template>

</xsl:stylesheet>

<notice type="article">

<accès><général/></accès>

<lisibilité><restreint/></lisibilité>

<auteurs>

<auteur>Julia Royer</auteur>

<auteur>Claude Rouleau</auteur>

</auteurs>

<titre>Le printemps</titre>

</notice>

(2)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 3

Résultat en navigateur

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 4

On ajoute l'affichage du type

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:value-of select="notice/titre" /></TITLE>

</HEAD>

<BODY>

<H1><xsl:value-of select="notice/titre" /></H1>

<HR/>

<P>Cette notice est de type

<xsl:value-of select="notice/@type" />.</P>

</BODY>

</HTML>

</xsl:template>

</xsl:stylesheet>

<notice type="article">

<accès><général/></accès>

<lisibilité><restreint/></lisibilité>

<auteurs>

<auteur>Julia Royer</auteur>

<auteur>Claude Rouleau</auteur>

</auteurs>

<titre>Le printemps</titre>

</notice>

(3)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 5

Résultat en navigateur

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 6

On affiche plutôt le 1 er auteur

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:value-of select="notice/titre" /></TITLE>

</HEAD>

<BODY>

<H1><xsl:value-of select="notice/titre" /></H1>

<HR/>

<P>Dans cette notice, le premier auteur est <xsl:value-of

select="notice/auteurs/auteur[1]" />.</P>

</BODY>

</HTML>

</xsl:template>

</xsl:stylesheet>

<notice type="article">

<accès><général/></accès>

<lisibilité><restreint/></lisibilité>

<auteurs>

<auteur>Julia Royer</auteur>

<auteur>Claude Rouleau</auteur>

</auteurs>

<titre>Le printemps</titre>

</notice>

(4)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 7

Résultat en navigateur

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 8

On aurait aussi pu…

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:value-of select="notice/titre" /></TITLE>

</HEAD>

<BODY>

<H1><xsl:value-of select="notice/titre" /></H1>

<HR/>

<P>Dans cette notice, le premier auteur est <xsl:value-of

select="notice/auteurs/auteur" />.</P>

</BODY>

</HTML>

</xsl:template>

</xsl:stylesheet>

<notice type="article">

<accès><général/></accès>

<lisibilité><restreint/></lisibilité>

<auteurs>

<auteur>Julia Royer</auteur>

<auteur>Claude Rouleau</auteur>

</auteurs>

<titre>Le printemps</titre>

</notice>

(5)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 9

Même résultat en navigateur

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 10

Et on aurait même pu…

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:value-of select="notice/titre" /></TITLE>

</HEAD>

<BODY>

<H1><xsl:value-of select="notice/titre" /></H1>

<HR/>

<P>Dans cette notice, le premier auteur est <xsl:value-of

select="//auteur" />.</P>

</BODY>

</HTML>

</xsl:template>

</xsl:stylesheet>

<notice type="article">

<accès><général/></accès>

<lisibilité><restreint/></lisibilité>

<auteurs>

<auteur>Julia Royer</auteur>

<auteur>Claude Rouleau</auteur>

</auteurs>

<titre>Le printemps</titre>

</notice>

(6)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 11

Toujours même résultat en navigateur

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 12

Travailler avec plusieurs gabarits

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:value-of select="notice/titre" /></TITLE>

</HEAD>

<BODY>

<xsl:apply-templates select="notice//auteur" />

</BODY>

</HTML>

</xsl:template>

<xsl:template match="auteur">

<P>Un des auteurs est

<xsl:value-of select="." />.</P>

</xsl:template>

<notice type="article">

<accès><général/></accès>

<lisibilité><restreint/></lisibilité>

<auteurs>

<auteur>Julia Royer</auteur>

<auteur>Claude Rouleau</auteur>

</auteurs>

<titre>Le printemps</titre>

</notice>

(7)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 13

Résultat en navigateur

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 14

Traitement des éléments vides

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:value-of select="notice/titre" /></TITLE>

</HEAD>

<BODY>

<xsl:apply-templates select="notice/accès/général" />

</BODY>

</HTML>

</xsl:template>

<xsl:template match="accès/général">

<P>L'accès à cette notice n'est pas limité.</P>

</xsl:template>

<notice type="article">

<accès><général/></accès>

<lisibilité><restreint/></lisibilité>

<auteurs>

<auteur>Julia Royer</auteur>

<auteur>Claude Rouleau</auteur>

</auteurs>

<titre>Le printemps</titre>

</notice>

(8)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 15

Résultat en navigateur

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 16

Il faut aussi prévoir "restreint"

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:value-of select="notice/titre" /></TITLE>

</HEAD>

<BODY>

<xsl:apply-templates select="notice/accès/général" />

<xsl:apply-templates select="notice/accès/restreint" />

</BODY>

</HTML>

</xsl:template>

<xsl:template match="accès/général">

<P>L'accès à cette notice n'est pas limité.</P>

</xsl:template>

<xsl:template match="accès/restreint">

<P>L'accès à cette notice est limité.</P>

</xsl:template>

<notice type="article">

<accès><général/></accès>

<lisibilité><restreint/></lisibilité>

<auteurs>

<auteur>Julia Royer</auteur>

<auteur>Claude Rouleau</auteur>

</auteurs>

<titre>Le printemps</titre>

</notice>

(9)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 17

Même résultat en navigateur avec le même document

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 18

Mais avec un autre document …

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:value-of select="notice/titre" /></TITLE>

</HEAD>

<BODY>

<xsl:apply-templates select="notice/accès/général" />

<xsl:apply-templates select="notice/accès/restreint" />

</BODY>

</HTML>

</xsl:template>

<xsl:template match="accès/général">

<P>L'accès à cette notice n'est pas limité.</P>

</xsl:template>

<xsl:template match="accès/restreint">

<P>L'accès à cette notice est limité.</P>

</xsl:template>

<notice type="article">

<accès><restreint/></accès>

<lisibilité><restreint/></lisibilité>

<auteurs>

<auteur>Julia Royer</auteur>

<auteur>Claude Rouleau</auteur>

</auteurs>

<titre>Le printemps</titre>

</notice>

(10)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 19

… le résultat change !

N.B.: Pour traiter la lisibilité de la même façon, il faudrait deux autres gabarits

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 20

Traitement typique d'éléments imbriqués

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:value-of select="notice/titre" /></TITLE>

</HEAD>

<BODY>

<xsl:apply-templates select="notice/auteurs" />

</BODY>

</HTML>

</xsl:template>

<xsl:template match="auteurs">

<P><STRONG>Auteurs:</STRONG></P>

<UL><xsl:apply-templates /></UL>

</xsl:template>

<xsl:template match="auteur">

<LI><xsl:value-of select="." /></LI>

</xsl:template>

<notice type="article">

<accès><général/></accès>

<lisibilité><restreint/></lisibilité>

<auteurs>

<auteur>Julia Royer</auteur>

<auteur>Claude Rouleau</auteur>

</auteurs>

<titre>Le printemps</titre>

</notice>

(11)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 21

Résultat en navigateur

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 22

Extrant de la transformation XSLT

<HTML>

<HEAD>

<TITLE>Le printemps</TITLE>

</HEAD>

<BODY>

<P><STRONG>Auteurs:</STRONG></P>

<UL>

<LI>Julia Royer</LI>

<LI>Claude Rouleau</LI>

</UL>

</BODY>

</HTML>

(12)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 23

"Rattachement" d'un style (1/2)

• Un même item de stylage peut en général être "rattaché" à différents éléments

• Par exemple, un intitulé ou un séparateur peut être rattaché:

– Soit à l'élément qui précède le séparateur – Soit à l'élément qui suit le séparateur

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 24

"Rattachement" d'un style (2/2)

• Souvent, on a le choix

• Mais il faut être conscient que si un élément est facultatif et n'apparaît pas dans un

document, les items de stylage qui lui sont associés n'apparaîtront pas non plus !

• Exemple à analyser:

– Ex. progressif Ex04MauvaisRattachement

(13)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 25

Attributs dans l'extrant HTML

• Pour mettre un attribut dont la valeur ne varie pas d'un document à l'autre:

– Facile: on met la valeur d'attribut dans un fragment HTML

– Exemple:

<a href="http://www.ebsi.umontreal.ca/">EBSI</a>

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 26

Attribut dont la valeur ne varie pas d'un document à l'autre

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:value-of select="notice/titre" /></TITLE>

</HEAD>

<BODY>

<H1><xsl:value-of select="notice/titre" /></H1>

<HR/>

<P>Cette notice est disponible à

l'<a href="http://ebsi.umontreal.ca/">EBSI</a>.

</P>

</BODY>

</HTML>

</xsl:template>

</xsl:stylesheet>

<notice type="article">

<accès><général/></accès>

<lisibilité><restreint/></lisibilité>

<auteurs>

<auteur>Julia Royer</auteur>

<auteur>Claude Rouleau</auteur>

</auteurs>

<titre>Le printemps</titre>

</notice>

(14)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 27

Résultat en navigateur

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 28

Attribut dont la valeur varie d'un document à l'autre

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE><xsl:value-of select="notice/titre" /></TITLE>

</HEAD>

<BODY>

<H1><xsl:value-of select="notice/titre" /></H1>

<HR/>

<P>Le type de ce document est

<xsl:value-of select="notice/@type" />.

Cliquez ici pour une

<a href="desc-{notice/@type}.html">description de ce type de document</a>.</P>

</BODY>

</HTML>

</xsl:template>

</xsl:stylesheet>

<notice type="article">

<accès><général/></accès>

<lisibilité><restreint/></lisibilité>

<auteurs>

<auteur>Julia Royer</auteur>

<auteur>Claude Rouleau</auteur>

</auteurs>

<titre>Le printemps</titre>

</notice>

(15)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 29

Résultat en navigateur

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 30

Extrant de la transformation XSLT

<HTML>

<HEAD>

<TITLE>Le printemps</TITLE>

</HEAD>

<BODY>

<H1>Le printemps</H1>

<HR>

<P>Le type de ce document est article.

Cliquez ici pour une

<a href="desc-article.html">description de ce type de document</a>.

</P>

</BODY>

</HTML>

(16)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 31

Gabarits de valeur d'attribut

• La forme {…} dans une valeur d'attribut d'un fragment HTML s'appelle un gabarit de valeur d'attribut

• Il doit contenir une expression XPath

• Le résultat de l'expression remplace le gabarit dans la valeur d'attribut réellement placée dans l'extrant

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 32

Autre méthode (plus générale) pour un attribut dont la valeur varie

d'un document à l'autre

• Voir l'exemple progressif Ex09Attribut

• Voir aussi l'exemple pour le multimédia:

– 160-XSLT-Ex-multimedia

(17)

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 33

Conversion de données (1/2)

• Pour appliquer une "table de conversion"

(par exemple, pour changer des codes en intitulés quelconques)

– Cas simple: ex. progressif Ex08Conversion – Cas plus complexe: 170-Ex-jointure-XSLT

• Fichier _LisezMoi.htm

Copyright © 2010-2012 Yves Marcoux - Reproduction interdite 34

Conversion de données (2/2)

• Traitements conditionnels: instructions XSLT xsl:if et xsl:choose

– Permet de produire des extrants différents dépendant d'une valeur qui se trouve quelque part dans le document

– Permet aussi de diminuer le nombre de gabarits

– Exemple progressif: Ex10ChooseEtIf

Références

Documents relatifs

• Si dans la feuille de style on prévoit une instruction xsl:template pour traiter un certain élément, ne pas oublier de préciser dans l’instruction ce qui doit se passer avec

● En perspective Java, sur un projet, bouton droit,. Team &gt;

⇒ pour rendre une interface explicite, le plus simple est d’enfermer la proc´edure externe dans un module (il existe d’autres solutions moins simples avec les bloc interface ,

extérieures exercées sur ce système sont symétriques par rapport à ce plan, alors on peut admettre que le mécanisme est « plan », c’est à dire que :. - les résultantes

Les élèves seront en autonomie sur les outils déjà proposés (fichier ou jeux) et vous prenez un groupe de 3–4 élèves sur une difficulté particulière : par exemple la

 Un axe dont les nœuds sont soit le nœud contexte, soit des nœuds qui suivent le nœud contexte dans l’ordre du document est un axe avant.  Un axe dont les nœuds sont soit

Si la valeur propre est double (c'est-à-dire si elle est une solution de multiplicité deux de l'équation de Laplace), alors on a un système ou deux équations sont superflues, et

Une fois que vous avez défini un champ image ou BLOB pour 4D Draw dans votre table et une zone externe de même nom dans un des formulaires de cette table, chaque enregistrement