Come faccio a trasformare un numero in una ripetizione di caratteri in XSLT?
Domanda
Ho il seguente input:
<node TEXT="txt">
<node TEXT="txt">
<node TEXT="txt"/>
<node TEXT="txt"/>
</node>
<node TEXT="txt"/>
</node>
<node TEXT="txt"/>
Attualmente sto usando:
<xsl:number level="multiple" count="node" format="1"/>
all'interno di uno script XSTL per ricevere il seguente output:
1 txt
1.1 txt
1.1.1 txt
1.1.2 txt
1.2 txt
2 txt
ma voglio avere questo output:
* txt
** txt
*** txt
*** txt
** txt
* txt
Puoi aiutarmi?
PS: voglio convertire una mappa freemind nella sintassi di base dell'elenco mediawiki. E sì! sono consapevole che ci sono diversi modi per ottenere mappe native native in wiki multimediali, ma ho bisogno della conversione degli <node>
- albero in ***
- elenchi
Soluzione
Un modo semplice per farlo è semplicemente tradurre il risultato del
<xsl:number/>nel formato desiderato.
Questa trasformazione:
<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>
quando applicato su questo documento XML:
<t> <node TEXT="txt"> <node TEXT="txt"> <node TEXT="txt"/> <node TEXT="txt"/></node> <node TEXT="txt"/></node> <node TEXT="txt"/> </t>
produce il risultato desiderato:
* txt ** txt *** txt *** txt ** txt * txt
Nota l'uso della funzione translate () per scartare qualsiasi ". " caratteri e per tradurre qualsiasi cifra in un " * " ;.