2016-08-22 2 views
0

Ich habe ein Eingabe-XML-Dokument, das teilweise codiert ist. Hier ist ein Beispiel:XSL unescape preprocessing

<content> 
    <body> 
    &lt;div class="contentLayout"&gt;&lt;div&gt;&lt;div&gt;&lt;table&gt; 
     [table's content] 
    &lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; 
    </body> 
</content> 

Mit Hilfe eines XSL-Stylesheet, würde Ich mag die Tabellen Inhalt nur angezeigt, aber nicht wissen, wie man mit dem entkam Code beschäftigen. Ich dachte zuerst zu unescape dann wählen <table> Knoten, aber ich habe keine Möglichkeit gefunden, dies zu tun. Die Verwendung von <xsl:value-of select="." disable-output-escaping="yes" /> scheint gut, aber es lässt mich nicht den <table> Knoten nur auswählen.

Haben Sie eine Lösung?

+0

Bitte [Bearbeiten] Ihre Frage und Format Markup als Code, so dass es korrekt angezeigt. Vielen Dank. – kjhughes

+0

Fertig. Vielen Dank im Voraus –

+0

Guter Start. Mach weiter. Du bist nicht fertig. – kjhughes

Antwort

0

Die XSL-Transformation wird durch Confluence XSLT Makro getan

Ich fürchte, ich bin nicht vertraut mit dem Werkzeug. Wenn Sie können, würde ich vorschlagen, dass Sie dies in zwei Durchgängen tun: Verwenden Sie zuerst disable-output-escaping für das Element body, und speichern Sie das Ergebnis in einer neuen Datei. Verarbeiten Sie dann die neue Datei im zweiten Durchlauf.

Die Alternative ist hässlich und kann leicht zu unerwarteten Ergebnissen führen:

<xsl:template match="/content"> 
    <table> 
     <xsl:value-of select="substring-before(substring-after(body, '&lt;table&gt;'), '&lt;/table&gt;')" disable-output-escaping="yes"/> 
    </table> 
</xsl:template> 
+0

Danke. Kann der erste Durchlauf in einer Variablen anstelle einer neuen physischen Datei gespeichert werden? –

+1

@PierreG Nein, ist es nicht. Sie müssen den Prozessor serialisieren das Ergebnis, und das wird nur auf die endgültige Ausgabe geschehen. –