Как мне преобразовать число в повторение символов в 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

Вы можете мне помочь?

PS: я хочу преобразовать карту свободного разума в базовый синтаксис списка вики. И да! я знаю, что есть несколько способов получить карты FreeMind в медиа-вики, но мне нужно преобразовать <node>-дерево ***-lists

1 ответ

Решение

Один из простых способов сделать это - просто перевести результат

  
в нужный формат.

Это преобразование:

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

<Т>
    
        
            
             
         
    

дает желаемый результат:

* текст
** текст
*** текст
*** текст
** текст
* текст

Обратите внимание на использование функции translate() для удаления любого символа "." символы и перевести любую цифру в "*".

Другие вопросы по тегам