/ / lxml XSLT entfernt CDATA während der Verarbeitung von XML - Python, xml, xslt, lxml

Lxml XSLT entfernt CDATA während der Verarbeitung von XML - python, xml, xslt, lxml

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 № 1

Für XSLT sind CDATA-Abschnitte in XML nur Rauschen. XSLT-Leckereien <![CDATA["]]> das Gleiche wie &quot; 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 xxxDann 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" />
...