Как преобразовать число в повторение символов в XSLT?
Вопрос
У меня есть следующие данные:
<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
Вы можете помочь мне?
ПС:Я хочу преобразовать карту свободного разума в базовый синтаксис списка mediawiki.И да!Я знаю, что есть несколько способов добавить собственные карты свободного разума в медиа-вики, но мне нужно преобразовать <node>
-дерево для ***
-списки
Решение
Один из простых способов сделать это — просто перевести результат
<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,
'
'
)"/>
<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 (), чтобы отказаться от "." персонажи и перевести любую цифру в «*».