Question

J'ai l'entrée suivante:

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

J'utilise actuellement:

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

dans un script XSTL pour recevoir le résultat suivant:

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

mais je veux avoir cette sortie:

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

Pouvez-vous m'aider?

PS: je souhaite convertir une carte freemind en syntaxe de base pour la liste mediawiki. Et oui! Je suis conscient du fait qu’il existe plusieurs façons d’obtenir des cartes freemind natives en wikis multimédias, mais j’ai besoin de la conversion de l’arbre <node> en *** - listes

.
Était-ce utile?

La solution

Une façon simple de le faire est de simplement traduire le résultat du

<xsl:number/>
dans le format souhaité.

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

lorsqu'il est appliqué à ce document XML:

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

produit le résultat souhaité:

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

Notez l'utilisation de la fonction translate () pour supprimer tout ".. " caractères et de traduire tout chiffre en " * ".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top