Frage

Ich habe folgende Eingabe:

<node TEXT="txt">
  <node TEXT="txt">
    <node TEXT="txt"/>
    <node TEXT="txt"/>
  </node>
  <node TEXT="txt"/>
</node>
<node TEXT="txt"/>

Ich bin derzeit mit:

<xsl:number level="multiple" count="node" format="1"/>

innerhalb eines XSTL Skript der folgenden Ausgabe zu erhalten:

1 txt
1.1 txt
1.1.1 txt
1.1.2 txt
1.2 txt
2 txt

, aber ich mag diese Ausgabe haben:

* txt
** txt
*** txt
*** txt
** txt
* txt

Können Sie mir helfen?

PS: Ich möchte ein Freemind Karte auf grundlegende mediawiki Liste Syntax konvertieren. Und ja! Ich bin mir bewusst, dass es mehr Möglichkeiten, einheimische Freemind Karten in Medien Wikis zu bekommen, aber ich brauche, um die Umwandlung der <node>-Baum-Listen ***

War es hilfreich?

Lösung

Eine einfache Möglichkeit, dies zu tun ist, zu übersetzen, nur das Ergebnis des

<xsl:number/>
in das gewünschte Format.

Diese Transformation:

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

, wenn auf diesem XML-Dokument angewandt:

<t>
    <node TEXT="txt">
        <node TEXT="txt">
            <node TEXT="txt"/>
            <node TEXT="txt"/></node>
        <node TEXT="txt"/></node>
    <node TEXT="txt"/>
</t>

erzeugt das gewünschte Ergebnis:

* txt
** txt
*** txt
*** txt
** txt
* txt

Beachten Sie die Verwendung der translate () Funktion jeder zu verwerfen „“ Zeichen und jede Ziffer in eine „*“ zu übersetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top