La gestione di CDATA con lxml implica la preparazione del parser con una dichiarazione idonea, ma che ne dici di XSLT? Per esempio:
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")
Se elaboro il file xml con CDATA tramite il processore XSLT lxml, tutto il CDATA viene rimosso. Come posso dire al processore XSLT di lasciare CDATA così com'è?
PS. Cordiali saluti, aggiungendo lo stesso parser a etree.XSLT
non cambia il risultato
risposte:
1 per risposta № 1Per quanto riguarda XSLT, le sezioni CDATA in XML sono solo rumore. XSLT tratta <![CDATA["]]>
lo stesso di "
che tratta lo stesso di "
; sono modi diversi per l'autore del documento di scrivere la stessa cosa.
Se stai usando le sezioni CDATA nel tuo input per trasmettere informazioni, allora è <![CDATA[xxx]]>
significa qualcosa di diverso da xxx
, quindi è necessario modificare il design XML.
1 per risposta № 2
Questo non sembra essere correlato a lxml. È la mia mancanza di conoscenza ...
CDATA in XSLT deve essere gestito con l'attributo "cdata-section-elements" nella dichiarazione di output. Ad esempio, se l'elemento descrizione nel file XML contiene CDATA:
<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" />
...