XSLTで数字を文字の繰り返しに変換するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/324259

  •  11-07-2019
  •  | 
  •  

質問

次の入力があります:

<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リストの構文に変換したいと思います。はい!ネイティブのフリーマインドマップをメディアWikiに取り込む方法はいくつかありますが、<node>-treeを***-lists

に変換する必要があります。
役に立ちましたか?

解決

これを行う簡単な方法の1つは、

<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()関数を使用して<!> quot;。<!> quot;を破棄することに注意してください。文字と任意の数字を<!> quot; * <!> quot;に変換します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top