4

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

4

1 に答える 1

6

私の場合、私が使用する場合

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

cdata は保持され、アクセス可能です。

于 2015-12-26T21:00:23.087 に答える