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