mwc*_*wcz 4 python xml lxml beautifulsoup cdata
我正在使用 BeautifulSoup 读取、修改和写入 XML 文件。我在删除 CDATA 部分时遇到了麻烦。这是一个简化的示例。
罪魁祸首 XML 文件:
<?xml version="1.0" ?>
<foo>
<bar><![CDATA[
!@#$%^&*()_+{}|:"<>?,./;'[]\-=
]]></bar>
</foo>
Run Code Online (Sandbox Code Playgroud)
这是 Python 脚本。
from bs4 import BeautifulSoup
xmlfile = open("cdata.xml", "r")
soup = BeautifulSoup( xmlfile, "xml" )
print(soup)
Run Code Online (Sandbox Code Playgroud)
这是输出。请注意缺少 CDATA 部分标记。
<?xml version="1.0" encoding="utf-8"?>
<foo>
<bar>
!@#$%^&*()_+{}|:"<>?,./;'[]\-=
</bar>
</foo>
Run Code Online (Sandbox Code Playgroud)
我也尝试打印soup.prettify(formatter="xml")并得到相同的结果,但空白略有不同。关于在 CDATA 部分中阅读的文档并不多,所以也许这是一lxml件事?
有没有办法告诉 BeautifulSoup 保留 CDATA 部分?
更新是的,这是一个 lxml 的事情。 http://lxml.de/api.html#cdata 那么,问题就变成了,是否可以告诉 BeautifulSoup 用 初始化 lxml strip_cdata=False?
就我而言,如果我使用
soup = BeautifulSoup( xmlfile, "lxml-xml" )
Run Code Online (Sandbox Code Playgroud)
然后 cdata 被保留和访问。
| 归档时间: |
|
| 查看次数: |
1872 次 |
| 最近记录: |