Может ли разделы CDATA быть сохранены BeautifulSoup?
Я использую 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
?