2

次の入力があります。

<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: フリーマインド マップを基本的な mediawiki リスト構文に変換したいと考えています。はい!ネイティブ フリーマインド マップをメディア ウィキに取得する方法がいくつかあることは承知していますが、 -tree<node>***-listsに変換する必要があります。

4

1 に答える 1

2

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

<xsl:番号/>
希望のフォーマットに。

この変換:

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

于 2008-11-27T18:08:24.597 に答える