2009-07-16 4 views
1

Ich versuche, das Beste aus der ausgezeichneten Open-Source-Mind-Map-Software FreeMind zu bekommen. Als Ergebnis einer Karte des Entwerfens ich eine Datei erhalten, die in der Tat ist eine XML-Datei, die eine einfache Struktur hat:XSLT 1.0: für jeden Terminal-Knoten dump seine Vorfahren Kette in CSV-Form

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

Aus Gründen der Einfachheit ich uninteressant entfernt haben (für meine Anwendung) zuschreibt.

Wie Sie sehen können, handelt es sich um eine einfache Containment-Hierarchie. Es gibt Code-Snippets, die zum Exportieren verwendet werden, aber für meine Bedürfnisse möchte ich einen csv-ähnlichen Text erstellen, bei dem jeder Knoten ohne Kinder seine gesamte Vorgänger-Kette durch Komma, Doppelpunkt oder was auch immer getrennt hat. Ich meine, würde ich so etwas sehen möchte:

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

Mein Ziel schnell zu sein, der Lage ist, die volle Qualifikation Pfad zu überprüfen, um diesen Knoten und dies für jeden und nur die Endknoten. Sollte ich in der Lage sein, sogar eine "punktierte Zahl" zu bekommen, bin ich mehr als glücklich (ich meine: 1.2.3.4 ... und so weiter, die Verschachtelungsposition eines Knotens markierend; ich erinnere mich, dass es etwas Nützliches in XSLT zu tun gibt Dies).

Diese XSLT erlauben würden, in csv eine vollständige qualifizierte Liste in einem Snap-Dump leicht die Hierarchie mit der Kraft des Freemind-Schnittstelle

Leider jetzt, sehr schlecht meine XSLT Geläufigkeit, dass, ich bin nicht in der Lage zu tun, nachdem die Handhabung . Es ist schade, XSLT sind ein sehr mächtiges Werkzeug ... Hat jemand einen Hinweis für mich?

Antwort

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

gut ... ist perfekt! x-actly was ich gesucht habe ... danke! – Daniel

Verwandte Themen