Cours de XML - XSLT en quelques mots

version 1.00, dernière mise à jour le 3 avril 2013.

   

Table des matières (TdM)

  1. I. Principe
    1. Introduction
      1. Les langages
      2. Utilisation d'une feuille de style
    2. Exemple
  1. II. XPath
    1. Introduction
    2. Sélection d'éléments
      1. Syntaxe de base
      2. Exercice : Mise en forme simple à l'aide de XSL
      3. Appel de fonctions
      4. Document Object Model
    3. Sélection d'attributs
      1. Exercice : Sélection d'attribut
    4. Opérateurs logiques
  1. III. Éléments de programmation
    1. Gestion des boucles
      1. xsl:for-each
      2. xsl:sort
      3. Exercice : Mise en forme avec réarrangement
    2. Conditions de test
      1. xsl:if
      2. xsl:choose
      3. Exercice : Utilisation d'éléments XSL

Retour au menu

Contenu du cours

I. Principe

1. Introduction

a. Les langages

XSL signifie eXtensible Stylesheet Langage, ou langage extensible de feuille de style. Cette abréviation recouvre en fait trois langages :

Dans le cadre d'une chaîne de production de contenu, il s'agit de transformer un document XML en un autre document XML. Ce cours se limite donc à l'utilisation de XSLT.

b. Utilisation d'une feuille de style

Il existe deux manières d'opérer la transformation d'un document XML

>Retour à la TdM

2. Exemple

Voici un exemple de bibliographie :

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="biblio.xsl"?>
<biblio>
  <livre>
    <titre>Les Misérables</titre>
    <auteur>Victor Hugo</auteur>
    <nb_tomes>3</nb_tomes>
  </livre>
  <livre>
    <titre>L'Assomoir</titre>
    <auteur>Émile Zola</auteur>
  </livre>
  <livre lang="en">
    <titre>David Copperfield</titre>
    <auteur>Charles Dickens</auteur>
    <nb_tomes>3</nb_tomes>
  </livre>
</biblio>

La feuille de style associée est la suivante :

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:output encoding="UTF-8" indent="yes" method="xml" />
  <xsl:template match="/">
    <livres>
      <xsl:apply-templates />
    </livres>
  </xsl:template>

  <xsl:template match="livre">
    <livre>Le livre <xsl:value-of select="titre" /> a été écrit par <xsl:value-of select="auteur" />, et publié en <xsl:value-of select="nb_tomes" /> </livre>
  </xsl:template>
</xsl:stylesheet>

Vous pouvez vérifier le document XML et la feuille de style associée.

>Retour à la TdM

II. XPath

1. Introduction

XPath est un langage permettant de cibler les nœuds d'un document XML. Il propose de nombreuses fonctionnalités, mais nous n'allons aborder ici qu'un extrait de sa syntaxe dite « abrégée ».

>Retour à la TdM

2. Sélection d'éléments

a. Syntaxe de base

L'exemple le plus simple d'expression de sélection est le nom d'un type d'élément. Cette expression sélectionne tous les éléments du type précisé descendant ou ancêtre d'un nœud donné. Exemple :

<xsl:value-of select="nom_element" />

Considérons par exemple 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>

Exercice 1. Mise en forme simple à l'aide de XSL

Énoncé
Correction
b. Appel de fonctions
c. Document Object Model

On peut aussi « naviguer » dans les branches de l'arborescence du document XML, en utilisant les ressources du DOM. Différents types de syntaxes sont possibles, fondées sur une expression de la forme Element[Expression]. Par exemple :

>Retour à la TdM

3. Sélection d'attributs

Les attributs d'un élément sont sélectionnés en faisant précéder leur nom par le caractère @. Les règles relatives à la sélection des éléments s'appliquent également aux attributs :

Si l'on veut afficher le contenu de l'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 (si rien n'est précisé, par défaut il s'agit du premier élément paragraphe fils).

Exercice 1. Sélection d'attribut

Énoncé
Correction (Correction de l'exercice de base)
Correction (Amélioration du rendu)

>Retour à la TdM

4. Opérateurs logiques

Les opérateurs logiques not(), and et or peuvent être utilisés, comme par exemple section[not(@titre)], qui sélectionne les éléments section qui n'ont pas d'attribut titre. Attention : lorsque, dans la DTD par exemple, l'attribut est défini comme ayant une valeur par défaut, même s'il n'est pas explicité dans le document XML, il est considéré comme existant.

>Retour à la TdM

III. Éléments de programmation

1. Gestion des boucles

a. xsl:for-each

Cet élément de bouclage crée une boucle dans laquelle sont appliquées des transformations. Son utilisation est de la forme :

<xsl:for-each select="jeunœud"> </xsl:for-each>

select correspond au jeu de nœuds devant être parcouru par la boucle. Exemple d'utilisation :

<ul>
  <xsl:for-each select="item">
    <li> <xsl:value-of select="." /> </li>
  </xsl:for-each>
</ul>

b. xsl:sort

Cet élément permet d'effectuer un tri sur un jeu de nœuds. Il doit être placé soit dans un élément xsl:for-each soit dans un élément xsl:apply-templates. C'est un élément vide qui peut être appelé plusieurs fois pour effectuer un tri multicritères. Chaque appel à cet élément provoque un tri sur un champ spécifique, dans un ordre prédéfini. L'utilisation de cet élément est de la forme :

<xsl:sort select="nœud" data-type="text | number | elt" order="ascending | descending" lang="nmtoken" case-order="upper-first | lower-first" />

Par 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'auteur.

Exercice 1. Mise en forme avec réarrangement

Énoncé
Correction

>Retour à la TdM

2. Conditions de test

a. xsl:if

Cet élément permet la fragmentation du modèle dans certaines conditions. Il est possible de tester la présence d'un attribut, d'un élément, de savoir si un élément est bien le fils d'un autre, de tester les valeurs des éléments et attributs. L'utilisation de cet élément est de la forme :

<xsl:if test="condition">action</xsl:if>

test prend la valeur 1 ou 0 suivant le résultat de la condition (vrai ou faux). action correspond à l'action devant être effectuée (texte à afficher, second test, gestion de chaîne...). Exemples d'utilisation : <xsl:if test="@âge=’24’>Cette personne a 24 ans.</xsl:if>, ou :

<xsl:if test="livre">
  <ul>
    <xsl:for-each select="livre">
      <li>
        <b> <xsl:value-of select="auteur" /> <br /> </b>
        <xsl:value-of select="titre" />.<xsl:if test="@langue='français'">Ce livre est en français.</xsl:if>
      </li>
    </xsl:for-each>
  </ul>
</xsl:if>

Dans le code précédent, si l'attribut langue de l'élément livre vaut français, le processeur ajoutera au fichier de sortie la phrase "Ce livre est en français". Il ne se passe rien si ce n'est pas le cas.

b. xsl:choose

Cet élément permet de définir une liste de choix et d'affecter à chaque choix une transformation différente. Chaque choix 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='francais'">Ce livre est en français.</xsl:when>
        <xsl:when test="@langue='anglais'">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>

Exercice 1. Utilisation d'éléments XSL

Énoncé
Correction

>Retour à la TdM

Historique de ce document

Bibliographie

De l'auteur (G. Chagnon)

Conditions d'utilisation et licence

Creative Commons License
Cette création est mise à disposition par Gilles Chagnon sous un contrat Creative Commons.

Retour au menu