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>
!@#$%^&*()_+{}|:"<>?,./;'[]\-=
</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
?