2009-07-16 11 views
1

J'essaie de tirer le meilleur parti de l'excellent logiciel libre Mind Map FreeMind. À la suite de la conception d'une carte que je reçois un fichier qui est en fait un fichier XML qui a une structure simple:XSLT 1.0: pour chaque noeud terminal vider sa chaîne ancêtre en forme csv

<node TEXT="0th text i am interested in"> 
    <node TEXT="1st text i am interested in"> 
    <node TEXT="2nd text i am interested in"> 
     <node TEXT="3dh text i am interested in"> 
     <node TEXT="4th text i am interested in"/> 
     </node> 
    </node> 
......... 

Par souci de simplicité, je l'ai enlevé sans intérêt (pour mon application) attributs. Comme vous pouvez le voir, il s'agit d'une simple hiérarchie de confinement. Il ya des extraits de code utilisés pour exporter, mais pour mes besoins je voudrais créer un texte semblable à csv où chaque nœud sans enfants a à sa gauche toute sa chaîne d'ancêtre séparée par une virgule, ou deux points, ou quoi que ce soit. Je veux dire, je voudrais voir quelque chose comme:

0th node; 1st text ; 2nd text; 3dh text; 4th text 
... then a new data line 

Mon objectif est d'être en mesure de vérifier rapidement le chemin complet de qualification à ce noeud et ce pour chacun et que les noeuds terminaux. Si je pouvais obtenir un "nombre en pointillé", je serais plus qu'heureux (je veux dire: 1.2.3.4 ... et ainsi de suite, marquant la position d'imbrication d'un noeud, je me souviens qu'il y a quelque chose d'utile à faire dans XSLT ce).

Cette XSLT permettrait de jeter dans csv une liste qualifiée complète en un clin d'oeil après avoir manipulé facilement la hiérarchie avec la puissance de l'interface FreeMind

Malheureusement, je ne peux pas le faire maintenant, ma maîtrise XSLT est très mauvais . C'est dommage, XSLT est un outil très puissant ... Quelqu'un at-il un indice pour moi?

Répondre

3

<xsl:output method="text" indent="no" encoding="utf-8" /> 
<xsl:strip-space elements="*" /> 

<xsl:template match="//node[not(node)]"> 
    <xsl:for-each select="ancestor::node"> 
     <xsl:value-of select="@TEXT" /> 
     <xsl:text> ; </xsl:text> 
    </xsl:for-each> 
    <xsl:value-of select="@TEXT" /> 
    <xsl:text>&#10;</xsl:text> 
</xsl:template> 

+0

bien ... est parfait! x-actly ce que je cherchais ... merci! – Daniel

Questions connexes