lxml XSLT在处理XML时删除CDATA

时间:2013-06-24 10:51:16

标签: python xml xslt lxml

使用lxml处理CDATA涉及使解析器具有合适的声明,但XSLT如何? 例如:

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')

如果我通过lxml XSLT处理器处理带有CDATA的xml文件,则会剥离所有CDATA。如何告诉XSLT处理器按原样保留CDATA?

PS。仅供参考,向etree.XSLT添加相同的解析器不会改变结果

2 个答案:

答案 0 :(得分:1)

这似乎与lxml无关。这是我缺乏知识......

XSLT中的CDATA应该在输出声明中使用“cdata-section-elements”属性进行处理。例如,如果XML文件中的description元素包含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' />
...

答案 1 :(得分:1)

就XSLT而言,XML中的CDATA部分只是噪声。 XSLT将<![CDATA["]]>视为与&quot;相同的"。它们是文档作者编写相同内容的不同方式。

如果您在输入中使用CDATA部分来传达信息,那么如果<![CDATA[xxx]]>表示与xxx不同的内容,那么您需要更改XML设计。