如何在XSLT中将数字转换为重复的字符?

时间:2008-11-27 17:12:28

标签: xslt mediawiki freemind

我有以下输入:

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

我目前正在使用:

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

在XSTL脚本中接收以下输出:

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

但我希望得到这个输出:

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

你能帮助我吗?

PS:我想将freemind地图转换为基本的mediawiki列表语法。是的!我知道有几种方法可以将原生freemind地图导入媒体wiki,但我需要将<node> - 树转换为*** - 列表

1 个答案:

答案 0 :(得分:2)

执行此操作的一种简单方法是将

<xsl:number/>
的结果转换为所需格式。

这种转变:

<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>

应用于此XML文档时:

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

产生想要的结果:

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

注意使用translate()函数丢弃任何“。”字符并将任何数字翻译成“*”。