0

使用 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不会改变结果

4

2 回答 2

1

这似乎与lxml无关。是我见识少...

XSLT 中的 CDATA 应使用输出声明中的“cdata-section-elements”属性进行处理。例如,如果 XML 文件中的描述元素包含 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' />
...
于 2013-06-24T11:29:10.697 回答
1

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

如果您在输入中使用 CDATA 部分来传达信息,也就是说,如果<![CDATA[xxx]]>意味着与 不同的东西xxx,那么您需要更改您的 XML 设计。

于 2013-06-24T13:30:06.977 回答