LXML破坏了我的CDATA部分。

10

我正在批量转换大量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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接