我使用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
?