Domanda

Ho il seguente input:

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

Attualmente sto usando:

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

all'interno di uno script XSTL per ricevere il seguente output:

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

ma voglio avere questo output:

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

Puoi aiutarmi?

PS: voglio convertire una mappa freemind nella sintassi di base dell'elenco mediawiki. E sì! sono consapevole che ci sono diversi modi per ottenere mappe native native in wiki multimediali, ma ho bisogno della conversione degli <node> - albero in *** - elenchi

È stato utile?

Soluzione

Un modo semplice per farlo è semplicemente tradurre il risultato del

<xsl:number/>
nel formato desiderato.

Questa trasformazione:

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

quando applicato su questo documento XML:

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

produce il risultato desiderato:

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

Nota l'uso della funzione translate () per scartare qualsiasi ". " caratteri e per tradurre qualsiasi cifra in un " * " ;.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top