python - BeautifulSoup 能否保留 CDATA 部分?

标签 python xml beautifulsoup lxml cdata

我正在使用 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>
        !@#$%^&amp;*()_+{}|:"&lt;&gt;?,./;'[]\-=
    </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/

相关文章:

python - 如何使用 python-docx 检索多个表中的特定表数据?

python - 获取文本文件中列出的所有文件的时间戳

python - 如何使用 Beautiful Soup 查找所有评论

php - PHP:Youtube最新的视频提要php代码机制

Python 请求没有响应

python - 使用 BeautifulSoup 从 HTML 中抓取数字

python - Bokeh - 当 output_backend = "webgl"时,绘图在 x 轴上重叠

python - 如何在 Python 中将特殊字符写入 CSV?

javascript - Node.js Xml2js 属性的结果

c# - 如何获取从 web 服务请求返回的原始 xml?