我正在使用 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.pretify(formatter="xml")
并得到了相同的结果,但空格略有不同。文档中没有太多关于读取 CDATA 部分的内容,所以这可能是 lxml
的事情?
有没有办法告诉 BeautifulSoup 保留 CDATA 部分?
更新 是的,这是一个 lxml 的东西。 http://lxml.de/api.html#cdata那么,问题就变成了,是否可以告诉 BeautifulSoup 使用 strip_cdata=False
初始化 lxml?
最佳答案
以我为例,如果我使用
soup = BeautifulSoup( xmlfile, "lxml-xml" )
然后 cdata 被保存并可访问。
关于python - BeautifulSoup 能否保留 CDATA 部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16426507/