1.Introduction à XSLT
Maintenant que l'on a un fichier XML et qu'il est valide, on va en faire quelque chose. Dans les pages qui vont suivre, nous allons tenter de voir ce que l'on peut faire simplement avec XSLT. XSLT est relativement complexe mais il est aussi très puissant. Avec XSLT on peut faire beaucoup de choses a condition de savoir l'utiliser.
Dans ces pages nous n'allons pas entrer dans les détails simplement parce que nous ne parlerons que de ce que nous connaissons et avons testé.
Ceci dit il est très simple d'assimiler les bases qui permettent déjà de faire des choses intéressantes. Par exemple, sur ce site, les cours sont écrit une seule fois en XML. Deux feuilles de styles différentes permettent de formater les cours page par page ou bien en version imprimable sur une seule page HTML.
Dans les pages suivantes nous allons formater l'annuaire en XML que nous avions dans les chapitres précédents.
2.Objectif
Reprenons le fichier XML sur lequel nous avons travaillé.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE annuaire SYSTEM "annuaire.dtd">
<annuaire>
<personne type="étudiant">
<nom>HEUTE</nom>
<prenom>Thomas</prenom>
<email>webmaster@xmlfacile.com</email>
</personne>
<personne type="chanteur">
<nom>SOUCHON</nom>
<prenom>Alain</prenom>
<email>alain@souchon.name</email>
</personne>
</annuaire>
Nous aimerions transformer ce fichier XML en fichier HTML suivant:
Qui a le code source suivant:
<html>
<head>
<title>Annuaire</title>
</head>
<body>
<table border="1">
<tr><th>Nom</th><th>Prenom</th><th>email</th></tr>
<tr><td>HEUTE</td><td>Thomas</td><td>webmaster@xmlfacile.com</td></tr>
<tr><td>SOUCHON</td><td>Alain</td><td>alain@souchon.name</td></tr>
</table>
</body>
</html>
Je vous assure que cela va être facile.
3.La transformation XSL
Voici la première étape.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="ISO-8859-1" indent="yes"/>
<xsl:template match="/">
<html>
<head><title>Annuaire</title></head>
<body>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
En appliquant cette feuille de style(Cf. section "installation") sur n'importe quel fichier XML on aura:
<html>
<head><title>Annuaire</title></head>
<body>
</body>
</html>
|
Sur cet exemple, on ne le voit pas très bien mais un fichier XSL n'est pas comme un programme ordinaire, il ne se lit pas nécessairement de haut en bas. Tout dépend du contenu de votre fichier XML.
4.Tranformation XSL (apply-templates)
Après la première, la deuxième étape.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1"/>
<xsl:template match="/">
<html>
<head><title>Annuaire</title></head>
<body>
<xsl:apply-templates select="annuaire"/>
</body>
</html>
</xsl:template>
<xsl:template match="annuaire">
<table border="1">
<tr><th>Nom</th><th>Prenom</th><th>email</th></tr>
<xsl:apply-templates select="personne"/>
</table>
</xsl:template>
<xsl:template match="personne">
</xsl:template>
</xsl:stylesheet>
|
Il est temps maintenant de passer à l'ultime étape.
5.Transformation XSL (value-of)
On se rapproche de la fin, maintenant il va falloir afficher le contenu d'une balise XML.
|
Maintenant nous allons voir un fichier différent qui arrive à un résultat identique.
6.Autre manière de faire
Cette version plus courte fonctionne également.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1"/>
<xsl:template match="/">
<html>
<head><title>Annuaire</title></head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="annuaire">
<table border="1">
<tr><th>Nom</th><th>Prenom</th><th>email</th></tr>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="personne">
<tr>
<td><xsl:value-of select="nom"/></td>
<td><xsl:value-of select="prenom"/></td>
<td><xsl:value-of select="email"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
|
On peut aussi remarquer que dans ce cas on est libre de les mettre dans l'ordre que l'on veut. L'attribut 'select' fonctionne un peu comme les arborescences des répertoires. On peut aussi récupérer une balise en remontant dans l'arborescence.
Juste une petite modification dans la balise personne pour montrer comment on récupère un attribut.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1"/>
<xsl:template match="/">
<html>
<head><title>Annuaire</title></head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="annuaire">
<table border="1">
<tr><th>Nom</th><th>Prenom</th><th>email</th></tr>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="personne">
<td><xsl:value-of select="prenom"/></td>
<td><xsl:value-of select="email"/></td></tr>
</xsl:template>
</xsl:stylesheet>
|
Et si on avait voulu récupérer l'attribut toto de la balise annuaire dans la balise personne, on aurait mis './../@toto' dans l'attribut select. C'est en fait le langage XPath qui est utilisé.
7.Conclusion
Ce n'est qu'un aperçu de ce que l'on peut faire avec XSLT mais rien qu'avec ceci vous pouvez déjà vous amuser. J'espère que cela vous suffit pour mesurer l'intérêt qu'apportent de telles feuilles de style.
Aucun commentaire:
Enregistrer un commentaire