可以CDATA部分由BeautifulSoup会保留吗?(Can CDATA sections be

2019-09-02 04:22发布

我使用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.prettify(formatter="xml")并得到了略有不同的空白相同的结果。 没有太多的文档有关CDATA段阅读,所以也许这是一个lxml事情吗?

有没有办法告诉BeautifulSoup保留CDATA节?

更新是的,这是一个LXML事情。 http://lxml.de/api.html#cdata于是,问题就来了,是不是可以告诉BeautifulSoup与初始化LXML strip_cdata=False

Answer 1:

在如果我用我的情况下,

soup = BeautifulSoup( xmlfile, "lxml-xml" )

然后CDATA被保留和入店。



文章来源: Can CDATA sections be preserved by BeautifulSoup?