Können CDATA-Abschnitte von BeautifulSoup beibehalten werden?

Ich verwende BeautifulSoup zum Lesen, Ändern und Schreiben einer XML-Datei. Ich habe Probleme damit, dass CDATA-Abschnitte entfernt werden. Hier ist ein vereinfachtes Beispiel.

Die Täter XML-Datei:

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

Und hier ist das Python-Skript.

from bs4 import BeautifulSoup

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

Hier ist die Ausgabe. Beachten Sie, dass die CDATA-Abschnitts-Tags fehlen.

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

Ich habe auch versucht zu druckensoup.prettify(formatter="xml") und habe das gleiche Ergebnis mit leicht unterschiedlichen Leerzeichen. In den Dokumenten ist nicht viel über das Lesen von CDATA-Abschnitten enthaltenlxml Ding?

Gibt es eine Möglichkeit, BeautifulSoup anzuweisen, CDATA-Abschnitte beizubehalten?

Aktualisieren Ja, es ist eine LXML-Sache.http://lxml.de/api.html#cdata Die Frage ist also, ob es möglich ist, BeautifulSoup anzuweisen, lxml mit zu initialisierenstrip_cdata=False?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage