2008-11-27 11 views
2

je l'entrée suivante:Comment transformer un nombre en une répétition de caractères dans XSLT?

<node TEXT="txt"> 
    <node TEXT="txt"> 
    <node TEXT="txt"/> 
    <node TEXT="txt"/> 
    </node> 
    <node TEXT="txt"/> 
</node> 
<node TEXT="txt"/> 

J'utilise actuellement:

<xsl:number level="multiple" count="node" format="1"/> 

dans un script XSTL pour recevoir la sortie suivante:

1 txt 
1.1 txt 
1.1.1 txt 
1.1.2 txt 
1.2 txt 
2 txt 

mais je veux avoir ce sortie:

* txt 
** txt 
*** txt 
*** txt 
** txt 
* txt 

Pouvez-vous m'aider? PS: Je souhaite convertir une carte Freemind en une syntaxe de base Mediawiki. Et oui! Je suis conscient qu'il ya plusieurs façons d'obtenir des cartes FreeMind indigènes dans les wikis médias, mais j'ai besoin de la conversion du <node> -tree à *** -listes

Répondre

2

Une façon simple de le faire est de simplement traduire le résultat de la

<xsl:number/>
dans le format voulu.

Cette transformation:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text"/>

<xsl:strip-space elements="*"/>

<xsl:template match="node"> 
    <xsl:variable name="vIndent"> 
    <xsl:number level="multiple" count="node"/> 
    </xsl:variable> 

    <xsl:value-of select= 
    "concat(translate($vIndent, 
        '1234567890.', 
        '**********'), 
      ' ', 
      @TEXT, 
     '&#xA;' 
     )"/> 
<xsl:apply-templates/> 
</xsl:template> 

</xsl:stylesheet>

lorsqu'il est appliqué sur ce document XML:

 
<t> 
    <node TEXT="txt"> 
     <node TEXT="txt"> 
      <node TEXT="txt"/> 
      <node TEXT="txt"/></node> 
     <node TEXT="txt"/></node> 
    <node TEXT="txt"/> 
</t> 

produit le résultat recherché:

 
* txt 
** txt 
*** txt 
*** txt 
** txt 
* txt 

Notez l'utilisation de la fonction translate() pour annuler tout "" caractères et de traduire n'importe quel chiffre en un "*".

+0

merci, cela a très bien fonctionné – Juve

Questions connexes