我正在使用 BeautifulSoup 来读取、修改和编写 XML 文件。我在删除 CDATA 部分时遇到问题。这是一个简化的例子。
罪魁祸首 XML 文件:
<?xml version="1.0" ?>
<foo>
<bar><![CDATA[
!@#$%^&*()_+{}|:"<>?,./;'[]\-=
]]></bar>
</foo>
这是 Python 脚本。
from bs4 import BeautifulSoup
xmlfile = open("cdata.xml", "r")
soup = BeautifulSoup( xmlfile, "xml" )
print(soup)
这是输出。请注意缺少 CDATA 部分标记。
<?xml version="1.0" encoding="utf-8"?>
<foo>
<bar>
!@#$%^&*()_+{}|:"<>?,./;'[]\-=
</bar>
</foo>
我也尝试打印soup.prettify(formatter="xml")
并得到相同的结果,但空白略有不同。文档中没有太多关于阅读 CDATA 部分的内容,所以也许这是一lxml
件事?
有没有办法告诉 BeautifulSoup 保留 CDATA 部分?
更新是的,这是一个 lxml 的东西。 http://lxml.de/api.html#cdata 所以,问题就变成了,是否可以告诉 BeautifulSoup 用 初始化 lxml strip_cdata=False
?