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
ですか?