¿Cómo transformo un número en una repetición de caracteres en XSLT?
Pregunta
Tengo la siguiente entrada:
<node TEXT="txt">
<node TEXT="txt">
<node TEXT="txt"/>
<node TEXT="txt"/>
</node>
<node TEXT="txt"/>
</node>
<node TEXT="txt"/>
Actualmente estoy usando:
<xsl:number level="multiple" count="node" format="1"/>
dentro de un script XSTL para recibir el siguiente resultado:
1 txt
1.1 txt
1.1.1 txt
1.1.2 txt
1.2 txt
2 txt
pero quiero tener esta salida:
* txt
** txt
*** txt
*** txt
** txt
* txt
¿Me pueden ayudar?
PD: Quiero convertir un mapa de mente libre a la sintaxis básica de la lista de mediawiki. ¡Y si! Soy consciente de que hay varias formas de obtener mapas nativos de freemind en wikis multimedia, pero necesito la conversión del <node>
- árbol a ***
- listas
Solución
Una manera simple de hacer esto es traducir el resultado del
<xsl:number/>al formato deseado.
Esta transformación:
<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>
cuando se aplica en este 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 el resultado deseado:
* txt ** txt *** txt *** txt ** txt * txt
Tenga en cuenta el uso de la función translate () para descartar cualquier ". " caracteres y traducir cualquier dígito en un " * " ;.