Hallo!
Gerade arbeite ich an einer kleinen Python-Anwendung, die ein XML-Format zum Speichern verwendet. Dazu verwende ich minidom. Damit die erzeugte XML-Datei einigermaßen lesbar ist, verwende ich prettyprinting, die XML-Elemente werden also hübsch eingerückt.
Leider wird beim speichern, laden und erneuten speichern das Dokument immer mehr aufgebläht. Das Verhalten lässt sich auch einfach nachvollziehen:
>>> from xml.dom import minidom >>> xmlstring = "<a><b><c></c></b></a>" >>> xmldoc = minidom.parseString(xmlstring) >>> print xmldoc.toprettyxml() <?xml version="1.0" ?> <a> <b> <c/> </b> </a> >>> xmlstring = xmldoc.toprettyxml() >>> xmldoc = minidom.parseString(xmlstring) >>> print xmldoc.toprettyxml() <?xml version="1.0" ?> <a> <b> <c/> </b> </a>
Das Problem ist wohl, dass durch das prettyprinting die Elemente jeweils noch einen Textknoten (der nur aus whitespace besteht) bekommen. Und der wird dann bei der Ausgabe wieder durch Zeilenumbruch und Einrückung hervorgehoben, und so weiter.
Meiner Meinung nach wäre das optimale Verhalten, nur Elementknoten einzurücken, Textknoten aber nicht. Also
<a> <b>Text</b> </a>
statt
<a> <b> Text </b> </a>
Lässt sich das irgendwie realisieren? Oder lässt sich das Problem mit der aufgeblasenen XML-Ausgabe sonst irgendwie umgehen?
Herzlichen Dank schon mal und liebe Grüße
Fredo