Für den Umgang mit CDATA mit lxml muss ein Parser mit entsprechender Deklaration erstellt werden. Wie steht es jedoch mit XSLT? Zum Beispiel:
from lxml import etree
parser = etree.XMLParser(strip_cdata=False)
tree = etree.parse("sample_with_cdata.xml", parser)
transform = etree.XSLT(etree.parse("dupe.xsl"))
xml_out = transform(tree)
xml_out.write("processed.xml")
Wenn ich eine XML-Datei mit CDATA über einen Lxml-XSLT-Prozessor verarbeite, wird die gesamte CDATA gelöscht. Wie kann ich dem XSLT-Prozessor mitteilen, dass er CDATA unverändert lassen soll?
PS. Zu Ihrer Information: Hinzufügen des gleichen Parsers zu etree.XSLT
ändert das Ergebnis nicht
Antworten:
1 für die Antwort № 1Für XSLT sind CDATA-Abschnitte in XML nur Rauschen. XSLT-Leckereien <![CDATA["]]>
das Gleiche wie "
das behandelt es genauso wie "
; Es gibt verschiedene Möglichkeiten für den Dokumentautor, dasselbe zu schreiben.
Wenn Sie in Ihrer Eingabe CDATA-Abschnitte verwenden, um Informationen zu übermitteln, ist dies der Fall <![CDATA[xxx]]>
bedeutet etwas anderes als xxx
Dann müssen Sie Ihr XML-Design ändern.
1 für die Antwort № 2
Dies scheint nicht mit lxml zu tun zu haben. Es ist mein Mangel an Wissen ...
CDATA in XSLT sollte mit dem Attribut "cdata-section-elements" in der Ausgabedeklaration behandelt werden. Wenn zum Beispiel das description-Element in der XML-Datei CDATA enthält:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" cdata-section-elements="description" />
...