Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Si vous vous posez une question, vous n'êtes peut-être pas le premier...Les traductions en français des bibles XML.Ces articles sont des références dans leur domaine.Tout ce qu'il faut savoir pour démarrer sur un sujet XML...


Répétition de caractères en XSLT.

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('&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;',1,
   indentation)"/>

Cette chaîne peut avoir été placé auaparavant dans une variable globale:

<xsl:variable name="tabulations" 
   select="'&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;'"/>
.../...
<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>&#9;</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.


 

Mots clés.



L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.


Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot  

Conception, réalisation et hébergement
Questions ou commentaires
  redacteurs@xmlfr.org