Comment transformer un nombre en répétition de caractères dans XSLT?
Question
J'ai l'entrée suivante:
<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 le résultat suivant:
1 txt
1.1 txt
1.1.1 txt
1.1.2 txt
1.2 txt
2 txt
mais je veux avoir cette sortie:
* txt
** txt
*** txt
*** txt
** txt
* txt
Pouvez-vous m'aider?
PS: je souhaite convertir une carte freemind en syntaxe de base pour la liste mediawiki. Et oui! Je suis conscient du fait qu’il existe plusieurs façons d’obtenir des cartes freemind natives en wikis multimédias, mais j’ai besoin de la conversion de l’arbre <node>
en ***
- listes
La solution
Une façon simple de le faire est de simplement traduire le résultat du
<xsl:number/>dans le format souhaité.
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,
'
'
)"/>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
lorsqu'il est appliqué à 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 souhaité:
* txt ** txt *** txt *** txt ** txt * txt
Notez l'utilisation de la fonction translate () pour supprimer tout ".. " caractères et de traduire tout chiffre en " * ".