Czy sekcje CDATA mogą być zachowane przez BeautifulSoup?

Używam BeautifulSoup do odczytu, modyfikacji i zapisu pliku XML. Mam problem z usuwaniem sekcji CDATA. Oto uproszczony przykład.

Plik XML sprawcy:

<?xml version="1.0" ?>
<foo>
    <bar><![CDATA[
        !@#$%^&*()_+{}|:"<>?,./;'[]\-=
    ]]></bar>
</foo>

A oto skrypt Pythona.

from bs4 import BeautifulSoup

xmlfile = open("cdata.xml", "r") 
soup = BeautifulSoup( xmlfile, "xml" )
print(soup)

Oto wyjście. Zauważ, że brakuje znaczników sekcji CDATA.

<?xml version="1.0" encoding="utf-8"?>
<foo>
<bar>
        !@#$%^&amp;*()_+{}|:"&lt;&gt;?,./;'[]\-=
    </bar>
</foo>

Próbowałem także drukowaćsoup.prettify(formatter="xml") i otrzymałem ten sam wynik przy nieco innych białych znakach. W dokumentach nie ma zbyt wiele do czytania w sekcjach CDATA, więc może to jestlxml rzecz?

Czy istnieje sposób, aby powiedzieć BeautifulSoup, aby zachował sekcje CDATA?

Aktualizacja Tak, to jest sprawa lxml.http://lxml.de/api.html#cdata Tak więc pojawia się pytanie, czy można powiedzieć BeautifulSoup, aby zainicjował lxml za pomocąstrip_cdata=False?

questionAnswers(1)

yourAnswerToTheQuestion