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

发布于 2024-07-09 16:02:21 字数 677 浏览 8 评论 0原文

我有以下输入:

<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:我想将自由思维图转换为基本的 mediawiki 列表语法。 是的! 我知道有多种方法可以将本机自由思维图放入媒体维基,但我需要将 -tree 转换为 ***-lists

I have the following input:

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

I am currently using:

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

within an XSTL script to receive the following output:

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

but i want to have this output:

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

Can you help me?

PS: I want to convert a freemind map to basic mediawiki list syntax. And yes! i am aware that there are several ways to get native freemind maps into media wikis, but i need the conversion of the <node>-tree to ***-lists

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

九公里浅绿 2024-07-16 16:02:21

一种简单的方法是直接翻译结果

<xsl:number/>

into the wanted format.

此转换:

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

应用于此 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() 函数丢弃任何“.” 字符并将任何数字转换为“*”。

One simple way to do this is to just translate the result of the

<xsl:number/>

into the wanted format.

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

when applied on this XML document:

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

produces the wanted result:

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

Note the use of the translate() function to discard any "." characters and to translate any digit into an "*".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文