LXML 破坏了我的 CDATA 部分

10 投票
1 回答
6107 浏览
提问于 2025-04-21 08:42

我正在批量转换很多XML文件,把它们的字符编码改成UTF-8:

with open(source_filename, "rb") as source:
    tree = etree.parse(source)

    with open(destination_filename, "wb") as destination:
        tree.write(destination, encoding="UTF-8", xml_declaration=True)

可惜的是,这个过程把我的CDATA部分搞坏了,反而把它们转义了。

源文件

<d><![CDATA[áÌÀøÅàùÑÄéú ëÌÄé áÈàÅùÑ éäå''ä ðÄùÑÀôÌÈè <small><small>(ùí ëå èæ)</small></small>

目标文件

<d>בְּרֵאשִׁית כִּי בָאֵשׁ יהו''ה נִשְׁפָּט &lt;small&gt;&lt;small&gt;(שם כו טז)&lt;/small&gt;&lt;/small&gt;

有没有什么设置可以让我保持我的CDATA部分不变?我主要是用LXML来改变字符编码,并正确写入XML头部。

1 个回答

22

使用 strip_cdata=False 这个选项

import lxml.etree as etree
parser = etree.XMLParser(strip_cdata=False)
with open(source_filename, "rb") as source:
    tree = etree.parse(source, parser=parser)

撰写回答