Les éléments de transformation XSL
Les éléments de transformation
Les éléments de transformations permettent de sélectionner et effectuer des opérations sur les éléments du document XML. Leur syntaxe est la suivante :
<xsl:nom [attributs]/>
Remarquez la présence du / indiquant que la balise ne possède pas de balise fermante.
Voici une petite liste des éléments de transformation :
Elément | Utilité |
---|---|
xsl:apply-imports | Importe une feuille de style importée |
xsl:apply-templates | Indique au processeur XSL de traiter les éléments enfants directs en leur appliquant les template rules définies dans la feuille XSL. L'attribut select permet de spécifier certains éléments enfants auxquels la transformation doit être appliquée |
xsl:attribute-set | Permet de créer un attribut à associer à un élément |
xsl:attribute-set | Permet de nommer une liste d'attributs, pouvant être appliqués à un élément particulier |
xsl:template | Permet de charger un canevas (template) grâce à son nom. |
xsl:choose | Structure conditionnelle de type "case" (utilisé en combinaison avec xsl:when et/ou xsl:otherwise) |
xsl:comment | Crée un commentaire dans l'arbre résultat |
xsl:copy | Copie le noeud courant dans l'arbre résultat |
xsl:copy-of | Copie le noeud sélectionné par le modèle dans l'arbre résultat |
xsl:decimal-format | Déclare un format de nombre décimal |
xsl:element | Permet de créer un élément avec le nom spécifié |
xsl:for-each | Permet d'appliquer un canevas à chaque noeud correspondant au modèle |
xsl:if | Permet d'effectuer un test conditionnel sur le modèle indiqué |
xsl:apply-templates
L'élément apply-templates utilisé au sein de la balise
<xsl:template/> permet d'appliquer la règle de transformation contenue dans la balise template.
Soit le document XML suivant :
<voiture>
<marque>Volkswagen</marque>
<immatriculation>9999 ZZ 99</immatriculation>
<modele>Golf Match</modele>
<couleur>Bleu clair</couleur>
</voiture>
et la feuille XSL associée :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns="http://www.w3.org/TR/REC-html40"
result-ns="">
<xsl:template match="voiture">
<Auto>
<xsl:apply-templates/>
</Auto>
</xsl:template >
</xsl:stylesheet>
Cette feuille de style donnera le résultat suivant :
<Auto></Auto>
L'élément apply-templates permet donc uniquement d'appliquer les modifications l'entourant, sans insérer de contenu supplémentaire.
xsl:value-of
Pour insérer le contenu des éléments sélectionnés par la règle de gabarit (template rule), il suffit d'utiliser l'élément value-of, qui permet d'insérer le contenu de la balise sélectionnée.
En reprenant le même document XML que celui présent ci-dessus, il est possible de définir la feuille de style XSL suivante :
<xsl:template match="voiture">
<table border="1">
<tr><th>Voiture</th></tr>
<tr><xsl:apply-templates/></tr>
</table>
</xsl:template >
<xsl:template match="marque">
<td><xsl:value-of/></td>
</xsl:template >
<xsl:template match="immatriculation">
<td><xsl:value-of/></td>
</xsl:template >
Cette feuille de style donnera le résultat suivant :
<table border="1">
<tr><th>Voiture</th></tr>
<td>Volkswagen</td>
<td>9999 ZZ 99</td>
</table>
xsl:apply-imports
L'élément apply-imports utilisé au sein de la balise
<xsl:template/> permet d'appliquer les règles de transformation importées dans la feuille XSL par l'intermédiaire de la balise <?xsl:import?>.
Par exemple, dans la feuille XSL suivante, la feuille import.xsl est importée
grâce à l'élément <?xsl:import?>,
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns="http://www.w3.org/TR/REC-html40"
result-ns="">
<xsl:import href="import.xsl"/>
<xsl:template match="voiture">
<Effet>
<xsl:apply-imports/>
</Effet>
</xsl:template >
</xsl:stylesheet>
Voici la feuille de style importée :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/TR/WD-xsl"
xmlns="http://www.w3.org/TR/REC-html40"
result-ns="">
<xsl:template match="voiture">
<EffetImporte>
<xsl:apply-imports/>
</EffetImporte>
</xsl:template >
</xsl:stylesheet>
xsl:for-each
Les régles de gabarit permettent grâce à l'élément <xsl:template> de sélectionner les éléments sur lesquels on désire effectuer une transformation. Grâce à l'élément <xsl:for-each>, il est possible de sélectionner des éléments enfants et de leur appliquer une règle de transformation.
La sélection des éléments enfant se fait à l'aide de l'attribut select de la balise <xsl:for-each>, utilisant les patterns XSL au même titre que l'élément <xsl:template>.
<xsl:template match="">
<EffetImporte>
<xsl:apply-imports/>
</EffetImporte>
</xsl:template >
</xsl:stylesheet>