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マップを基本的な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,
'
'
)"/>
<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;に変換します。
所属していません StackOverflow