2008-11-27 5 views
2

У меня есть следующий входной сигнал:Как преобразовать число в повторение символов в 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 в основной синтаксис списка мультимедиа. И да! я знаю, что есть несколько способов получить родные Freemind карты в Мидию вики, но мне нужно преобразование <node> -tree в *** -lists

ответ

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 

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

+0

спасибо, это сработало достаточно хорошо – Juve 2008-11-27 21:30:55

 Смежные вопросы

  • Нет связанных вопросов^_^