Wie entferne ich alle Zeilenumbrüche?
-
11-07-2019 - |
Frage
Ich habe so etwas wie folgt aus:
<node TEXT=" txt A "/>
<node TEXT="
txt X
"/>
<node>
<html>
<p>
txt Y
</p>
</html>
</node>
<node TEXT="txt B"/>
, und ich will XSLT verwenden, um dies zu erhalten:
txt A
txt X
txt Y
txt B
Ich möchte alle nutzlos Leerzeichen und Zeilenumbrüchen von @ TEXT ist und CDATA des abzustreifen. Die einzige XML-Eingabe, die Struktur mit dem Ausgang schenkt die <node>
-Tags.
Lösung
Die folgende Transformation:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/>
<xsl:template match="*">
<xsl:apply-templates select="@TEXT | node()"/>
</xsl:template>
<xsl:template match="node/@TEXT | text()">
<xsl:if test="normalize-space(.)">
<xsl:value-of select=
"concat(normalize-space(.), '
')"/>
</xsl:if>
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
, wenn gegen dieses XML-Dokument angewandt
<t> <node TEXT=" txt A "/> <node TEXT=" txt X"/> <node> <html> <p> txt Y </p> </html> </node> <node TEXT="txt B"/> </t>
erzeugt das gewünschte Ergebnis:
txt A
txt X
txt Y
txt B
Beachten Sie die Verwendung der Standard-XPath-Funktion normalisieren-Raum ( ) , die alle führenden und nachgestellten Leerzeichen abstreift und jede Folge von anderen Räume mit nur einem Raum ersetzt.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow