Im Folgenden wird XSLT und Eingabe/Ausgabe-XML verwendet. Das Ausgabe-XML enthält die leeren CDATA-Elemente. Wie verhindert man das Hinzufügen ohne Ausschluss von cdata-section-Elementen? XSLTWie verhindert man das Hinzufügen der leeren CDATA-Elemente?
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output cdata-section-elements="first second" indent="yes"/>
<xsl:strip-space elements="first second"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Eingangs
<?xml version="1.0" encoding="UTF-8"?>
<top>
<first>
<second/>
</first>
<first>
<second><![CDATA[! Please note...]]></second>
</first>
</top>
Output mit streifen Raum
<?xml version="1.0" encoding="UTF-8"?>
<top>
<first>
<second/>
</first>
<first>
<second><![CDATA[! Please note...]]></second>
</first>
</top>
Ausgabe ohne streifen Raum
<?xml version="1.0" encoding="UTF-8"?>
<top>
<first><![CDATA[
]]><second/><![CDATA[
]]></first>
<first><![CDATA[
]]><second><![CDATA[! Please note...]]></second><![CDATA[
]]></first>
</top>
Was ist die Ausgabe, die Sie erwarten, vorausgesetzt, Sie haben das 'erste' Element als CDATA-Abschnittselement und es hat ein untergeordnetes Element? –
Das obige Beispiel spiegelt die Struktur und den Inhalt der echten Dokumente wider. Die "ersten" und "zweiten" Elemente können einen CDATA-Abschnitt haben. Die obige Identitätsvorlage funktioniert wie erwartet, wenn "first" oder "second" CDATA enthält. Auch Eingabe-XML kann "Second" im "First" ohne CDATA verschachtelt haben. Ich erwartete die gleiche Ausgabe wie eine Eingabe, während ich Identitätsvorlage anwende. – senleft
Ich fragte nach der erwarteten Ausgabe. Wenn Sie glauben, dass eine Identitätstransformation in XSLT CDATA-Abschnitte erhalten soll, dann wird das XML nicht von einem XML-Parser in ein XSLT/XPath-Baummodell geparst, das einfach Textknoten hat, also ein Eingabebaum ist umgewandelt in einen Ergebnisbaum, in dem Textknoten-Kindelemente bestimmter Elemente als CDATA-Abschnitte serialisiert werden können, wenn nach 'xsl: output cdata-section-elements' gefragt wird. Aber das ist ein Ergebnisbaum Serialisierungsschritt, der die Textknoten als CDATA-Abschnitt serialisiert, es hängt nicht vom Eingabemarkupformat ab. –