Skip to content

Créer une variable en XSL — N°12/XXX

29/03/2010

On va entrer dans la question des variables par la petite porte, mais ce n’est pas très gênant.

Dans les exercices précédents, vous avez peut-être remarqué qu’on commençait à avoir des formules mathématiques assez longues.

La toute dernière formule ( dans le billet 11) était :

<xsl:value-of select="format-number((an2005/inscrits div an2005/population)*100, '#.00')"/>

Mais dans la correction du billet 9 on avait vu :

<xsl:sort select="(an2008/inscrits div an2008/population)-(an2005/inscrits div an2005/population)" order="descending" data-type="number"/>

L’attribut select="" finit par contenu une combinaison d’informations, dont le sens, à la lecture rapide, se perd rapidement.

Pour éviter d’oublier de fermer une parenthèse (cas classique, récurrent et rédhibitoire pour le processeur XSL qui refuse alors de processer), une aide précieuse peut être apportée en définissant des variables dont le nom sera explicite.

Ainsi dans le cas de mon billet 11, avant d’écrire cette longue formule, je vais écrire :

<xsl:variable name="pourcentage2005" select="an2005/inscrits div an2005/population)*100"/>

J’aurai ainsi stocké dans une variable du nom pourcentage2005 le résultat de cette opération, pour chacun des noeuds <ville> traités.

Ensuite, quand je voudrai afficher ce pourcentage dans un format plus lisible (avec seulement deux décimales), je pourrai écrire :

<xsl:value-of select="format-number($pourcentage2005, '#.00')"/>

et le risque de ne pas fermer la dernière parenthèse est considérablement diminué.

Deux remarques importantes :

  • en l’occurrence, cette variable est vraie quand on est à l’intérieur de chaque noeud <ville> (donc après avoir ouvert la balise <xsl:for-each select="ville">)
  • quand on veut utiliser une variable, on l’appelle par son nom précédé du caractère $.

Voilà le fichier XSL dans son ensemble


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" method="xhtml"/>
<xsl:template match="/">
<html>
<head>
<title>Stats DLL : Pourcentage d'inscrits dans la population</title>
</head>
<body>
<h3>Pourcentage d'inscrits en bibliothèque publique pour chaque ville, en 2005 et 2008</h3>
<table border="1">
<tbody>
<tr><th>Ville</th><th>% en 2005</th><th>% en 2008</th></tr>
<xsl:for-each select="dll/ville">
<xsl:variable name="pourcentage2005" select="(an2005/inscrits div an2005/population)*100"/>
<xsl:variable name="pourcentage2008" select="(an2008/inscrits div an2008/population)*100"/>
<tr>
<td><xsl:value-of select="@nom"/></td>
<td><xsl:value-of select="format-number($pourcentage2005, '#.00')"/></td>
<td><xsl:value-of select="format-number($pourcentage2008, '#.00')"/></td>
</tr>
</xsl:for-each>
</tbody>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Pas d’exercice sur les variables pour le moment : je préfère vous laisser le temps d’en voir plusieurs illustrations avant.

Advertisements

Les commentaires sont fermés.

%d blogueurs aiment cette page :