Skip to content

Composition d’un fichier XSL simple – N° 3/XXX

14/12/2009

Bon, c’est le 3e billet de la série. On va enfin ouvrir le fichier XSL du premier billet. Il est très court.

Au passage, j’ai oublié de vous le signaler : par défaut, l’affichage dans XML Copy  Editor se fait en très petits caractères. Utilisez systématiquement la combinaison Ctrl + molette de la souris pour afficher les fichiers en plus gros.

En voici le contenu

Si dans XML Copy Editor vous choisissez de créer un nouveau fichier XSL, d’emblée l’éditeur vous fournira ces deux lignes, et la dernière :

  • la déclaration XML indiquant qu’il s’agit d’un fichier XML
  • La balise d’ouverture de tout fichier XSL, avec indication en attribut du numéro de version du langage XSL utilisé (ici, par défaut : la version 1) et la balise fermante en fin de fichier  : <xsl:stylesheet>

Création d'un nouveau fichier XSL avec XML Copy Editor

Nouveau fichier XSL

Tous les traitements que l’on va vouloir appliquer au fichier XML initial seront exprimés sous forme de balises <xsl:qqchose>, entre les balises ouvrante et fermante <xsl:stylesheet>.

La 3e ligne du fichier XSL <xsl:output method= »text »/> permet de préciser que le fichier en sortie sera un fichier texte. En fait, cette précision est généralement inutile. Le plus important vient après :

Le template

Avec les lignes <xsl:template match= »/ »/> et </xsl:template> sont indiqués tous les traitements effectués sur les données du fichier XML en entrée.

La balise <xsl:template> contient une « règle » (traduction française de template) qui indique que le contenu s’applique à tout le document : match= »/ » est la manière en XSL de décrire la racine du document (le tout début du fichier XML).

Désignation du chemin pour arriver à l’information

Pour rappel, le fichier XML est structuré ainsi :

<dll>
 <ville>
 <nom>Ambérieu-en-Bugey</nom>
 <annee>2005</annee>
 </ville>
 <ville>
 <nom>Ambronay</nom>
 <annee>2005</annee>
 </ville>
 …
 </dll>

La balise racine du fichier XML est la balise <dll>.

  • Si je veux désigner l’ensemble du fichier XML (l’ensemble du contenu des balises), j’écrirai : match= »/ »
  • Si je veux appliquer un traitement concernant uniquement les balises annee, j’écrirai : match= »//annee », qui signifie : balise <annee>, où qu’elle se trouve dans le fichier (le double-slash // signifie : n’importe où)
  • Si des balises <annee> existent à plusieurs niveaux dans le fichier, et que je veux désigner les balises <annee> dépendant d’une balise <ville>, j’écrirai : match= »//ville/annee » (balise <annee> dépendant d’une balise <ville>, la balise <ville> pouvant être n’importe où).

Trois balises XSL essentielles

  • <xsl:for-each select= » »> permet de désigner une balise qui sera présente plusieurs fois dans le fichier initial. Et chaque fois que l’on rencontrera cette balise, on appliquera les commandes situées entre <xsl:for-each> et </xsl:for-each>
  • <xsl:value-of select= » »> permet de récupérer le contenu situé à l’intérieur d’une balise
  • <xsl:text> permet de générer du texte dans le fichier en sortie, qui n’existe pas dans le fichier d’origine

Ce que fait le fichier XSL ici présent

Je reprends le fichier XSL ligne à ligne.

<xsl:template match= »/ »> Je me place à la racine du fichier XML
<xsl:text>il y a </xsl:text> Dans mon document en sortie, je produis du texte ex nihilo : « il y a « 
<xsl:value-of select= »count(//ville) »/> Je compte le nombre de balises <ville>, où qu’elles soient dans le fichier, et j’affiche la valeur de ce nombre
<xsl:text>communes</xsl:text> Après cette valeur, j’affiche le mot « communes ». La première ligne de mon fichier produit sera donc : »Il y a XXX communes« , XXX étant remplacé par le nombre de communes,

ou plus exactement le nombre de balises <ville> trouvées dans le fichier initial

<xsl:text></xsl:text><xsl:text></xsl:text> Je génère ensuite deux sauts de ligne : le saut de ligne n’existe pas en XML, je le désigne par son code en Unicode

Remarque : si vous visualisez le fichier XSL dans le navigateur, vous ne voyez pas ce code mais de simples espaces. Pour les voir, il faut enregistrer le fichier pour l’ouvrir avec l’éditeur XML ou simplement Notepad.

<xsl:for-each select= »//ville »> Pour chaque balise <ville> trouvée :
<xsl:value-of select= »nom »/> (<xsl:value-of select= »annee »/>) J’affiche le contenu de la balise <nom>dépendant de cette balise <ville>

suivi, entre parenthèses, de la valeur de la balise <annee>

dépendant aussi de cette balise <ville>

</xsl:for-each> Fin de la bouche « ville » : je traite donc comme décrit ci-dessus la première occurrence de balise <ville>puis la seconde, etc.

Jusqu’à extinction des feux….

</xsl:template>

Petit exercice

Pour compter les villes « apparaissant » dans les stats en 2005, il faut écrire : count(//ville[annee=’2005′]). Les crochets [ ] indiquent une condition (on y reviendra plus longuement).

Modifiez le fichier XSL pour insérer, sous l’indication du nombre de communes, le texte : « Villes apparaissant en 2005 : XXX ; Villes apparaissant en 2006 : XXX ;Villes apparaissant en 2007 : XXX ; Villes apparaissant en 2008 : XXX », où les XXX sont remplacés par le nombre de villes (<xsl:value-of select= »count(//ville[annee=’2005′]) »/>).

Appliquez ensuite le fichier XSL modifié au fichier XML fourni dans le 1er billet sur XSL.

Pensez bien au slash final avant le chevron final : c’est une balise autofermante.

Correction.

Vous êtes invités à coller en commentaire les codes que vous obtenez et qui ne fonctionnent pas.

Publicités
7 commentaires
  1. 02/01/2010 15:38

    Exercice réussi, merci ! Le suivant aux prochaines vacances scolaires ? (…)

  2. 02/01/2010 15:41

    @clairh : Bravo ! (c’est sympa de me tenir au courant, je pourrai ainsi ajuster au besoin) la semaine de la rentrée va être lourde pour la série XSL… Avec des exos faciles, mais tout de même 3 billets complémentaires.

Trackbacks

  1. Techno-fil (15/12/09) « pintiniblog
  2. Exercice du cours 3 – correction « Encore un biblioblog…
  3. Les noeuds XML : d’où je veux, quand je veux (XPath) — N°5a/XXX « Bibliothèques [reloaded]
  4. Faire un peu plus que des fichiers texte avec du XSL – N°6/XXX « Bibliothèques [reloaded]
  5. Série XSL : petit résumé au bout de deux mois « Bibliothèques [reloaded]

Les commentaires sont fermés.

%d blogueurs aiment cette page :