Développons en Java 2.30 | |
Copyright (C) 1999-2022 Jean-Michel DOUDOUX | (date de publication : 15/06/2022) |
|
Niveau : | Supérieur |
XSLT est une recommandation du consortium W3C qui permet de transformer facilement des documents XML en d'autres documents standard sans programmation. Le principe est de définir une feuille de style qui indique comment transformer le document XML et de la fournir avec le document à un processeur XSLT.
On peut produire des documents de différents formats : XML, HTML, XHTML, WML, PDF, etc...
XSLT fait partie de XSL avec les recommandations :
Une feuille de style XSLT est un fichier au format XML qui contient les informations nécessaires au processeur pour effectuer la transformation.
Le composant principal d'une feuille de style XSLT est le template qui définit le moyen de transformer un élément du document XML dans le nouveau document.
XSLT est relativement complet mais complexe : cette section n'est qu'une présentation rapide de quelques fonctionnalités de XSLT. XSLT possède plusieurs fonctionnalités avancées, telles que la sélection des éléments à traiter, le filtrage ou le tri de ces éléments.
Ce chapitre contient plusieurs sections :
XML Path ou XPath est une spécification qui fournit une syntaxe pour permettre de sélectionner un ou plusieurs éléments dans un document XML. Il existe sept types d'éléments différents :
Cette section ne présente que les fonctionnalités de base de XPath.
XPath est utilisé dans plusieurs technologies liées à XML telles que XPointer et XSLT.
Un document XML peut être représenté sous la forme d'un arbre composé de noeuds. XPath grâce à une notation particulière permet de localiser précisément un composant de l'arbre.
La notation reprend une partie de la notation utilisée pour naviguer dans un système d'exploitation, ainsi :
XPath permet de filtrer les éléments sur différents critères en plus de leur nom
Une feuille de style XSLT est un document au format XML et doit donc respecter toutes les règles d'un tel document. Pour préciser les différentes instructions permettant de réaliser la transformation, un espace de nommage particulier est utilisé : xsl. Tous les tags de XSLT commencent donc par ce préfixe, ainsi le tag racine du document est xsl:stylesheet. Ce tag racine doit obligatoirement posséder un attribut version qui précise la version de XSLT utilisée.
Exemple : une feuille de style minimale qui ne fait rien |
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet> |
Le tag xsl:output permet de préciser le format de sortie. Ce tag possède plusieurs attributs :
Pour effectuer la transformation, le document doit contenir des règles. Ces règles suivent une syntaxe particulière et sont contenues dans des modèles (templates) associés à un ou plusieurs éléments désignés avec un motif au format XPath.
Un modèle est défini grâce au tag xsl:template. La valeur de l'attribut match permet de fournir le motif au format XPath qui sélectionnera le ou les éléments sur lesquels le modèle va agir.
Le tag xsl:apply-templates permet de demander le traitements des autres modèles définis pour chacun des noeuds fils du noeud courant.
Le tag xsl:value-of permet d'extraire la valeur de l'élément respectant le motif XPath fourni avec l'attribut select.
Il existe beaucoup d'autres tags notamment plusieurs qui permettent d'utiliser des structures de contrôles de types itératifs ou conditionnels.
Le tag xsl:for-each permet de parcourir un ensemble d'éléments sélectionnés par l'attribut select. Le modèle sera appliqué sur chacun des éléments de la liste.
Le tag xsl:if permet d'exécuter le modèle si la condition précisée par l'attribut test au format XPath est juste. XSLT ne définit pas de tag équivalent à la partie else : il faut définir un autre tag xsl:if avec une condition opposée.
Le tag xsl:choose permet de définir plusieurs conditions. Chaque condition est précisée grâce à l'attribut xsl:when avec l'attribut test. Le tag xsl:otherwise permet de définir un cas par défaut qui ne correspond pas aux autres cas définis dans le tag xsl:choose.
Le tag xsl:sort permet de trier un ensemble d'éléments. L'attribut select permet de préciser les éléments qui doivent être triés. L'attribut data-type permet de préciser le format des données (text ou number). l'attribut order permet de préciser l'ordre de tri (ascending ou descending).
Le plus simple pour tester une feuille XSLT qui génère une page HTML est de la tester avec Internet Explorer version 6. Cette version est entièrement compatible avec XML et XSLT. Les versions 5 et 5.5 ne sont que partiellement compatibles. Les versions antérieures ne le sont pas du tout.
Xalan 2 utilise l'API JAXP.
Exemple : TestXSL2.java |
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import org.xml.sax.*;
import java.io.IOException;
public class TestXSL2
{
public static void main(String[] args)
throws TransformerException, TransformerConfigurationException,
SAXException, IOException
{
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource("test.xsl"));
transformer.transform(new StreamSource("test.xml"), new StreamResult("test.htm"));
}
} |
Exemple : la feuille de style XSL test.xsl |
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40">
<xsl:output method="html" indent="no" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<HTML>
<HEAD>
<TITLE>Test avec XSL</TITLE>
</HEAD>
<xsl:apply-templates />
</HTML>
</xsl:template>
<xsl:template match="BIBLIOTHEQUE">
<BODY>
<H1>Liste des livres</H1>
<TABLE border="1" cellpadding="4">
<TR><TD>Titre</TD><TD>Auteur</TD><TD>Editeur</TD></TR>
<xsl:apply-templates />
</TABLE>
</BODY>
</xsl:template>
<xsl:template match="LIVRE">
<TR>
<TD><xsl:apply-templates select="TITRE"/></TD>
<TD><xsl:apply-templates select="AUTEUR"/></TD>
<TD><xsl:apply-templates select="EDITEUR"/></TD>
</TR>
</xsl:template>
</xsl:stylesheet> |
Exemple : compilation et exécution avec Xalan |
javac TestXSL2.java -classpath .;xalan2.jar
java -cp .;xalan2.jar TestXSL2 |
|