Comment créer une chaîne contenant "n" fois le même caractère en XSLT?
Eric van der Vlist,
Dyomedea (vdv@dyomedea.com).
jeudi 19 juillet 2001
Je suis en train de réaliser un petit forum en XML / XSLT.
Dans mon document XML, j'introduis
un élément <indentation>x</indentation>, qui correspond au niveau
d'indentation du message initial et des différentes réponses.
J'aurais voulu savoir comment je pouvais exploiter cet élément
pour avoir une indentation du style :
<!-- ####################################### -->
Message
Initial
reponse au message
reponse a la reponse
...
<!-- ####################################### -->
En gros, je voudrais que la valeur de l'élément niveau
corresponde à x fois le caractère tabulation.
Je dois sortir du texte avec une indentation précise, or il
me met des retours à la ligne et des
espaces où je n'en veux pas, et il n'en met pas où je le souhaite...
La manière la plus simple pour créer une chaîne contenant
"n" fois le même caractère en XSLT/XPath est d'utiliser la fonction XPath substring() pour
extraire les "n" premiers caractères d'une chaîne plus longue mais de
longueur fixe, par exemple:
<xsl:value-of
select="substring('											',1,
indentation)"/>
Cette chaîne peut avoir été placé auaparavant dans une variable globale:
<xsl:variable name="tabulations"
select="'											'"/>
.../...
<xsl:value-of
select="substring($tabulations, 1, indentation)"/>
L'adaptation de la boucle que l'on utilise fréquemment en pareille
circonstance avec un langage de programmation procédural est également possible
bien que plus verbeuse:
<xsl:template match="indentation" name="indentation">
<xsl:param name="i" select="."/>
<xsl:text>	</xsl:text>
<xsl:if test="$i > 1">
<xsl:call-template name="indentation">
<xsl:with-param name="i" select="$i - 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
Jean-Charles
Preaux: "[xml-tech] indentation"Eric
van der Vlist: "[xml-tech] Re: indentation"Raymond
Bourges: "[xml-tech] xsl:for !"Eric
van der Vlist: "[xml-tech] Re: xsl:for !"Nathalie
Le Roy: "[xml-tech] boucle pour indenter"Eric
van der Vlist: "[xml-tech] Re: boucle pour indenter"
Copyright 2001,
Eric van der Vlist.
|