/ / lxml XSLT rimuove CDATA durante l'elaborazione di XML - python, xml, xslt, lxml

lxml XSLT rimuove CDATA durante l'elaborazione di XML - python, xml, xslt, lxml

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

Per quanto riguarda XSLT, le sezioni CDATA in XML sono solo rumore. XSLT tratta <![CDATA["]]> lo stesso di &quot; 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" />
...