[Python-de] XML und encoding mit xml.dom.minidom

Diez B. Roggisch deets at web.de
Fre Aug 19 20:06:09 CEST 2005


>> DOM ist nicht dafuer gemacht dokumente zu schreiben - daher fehlt sowas.
> 
> gedacht. Schliesslich gibt es hierfür entsprechende API Methoden.> 
> Das ist Unsinn.  DOM ist gerade für die Manipulation von XML Dokumenten 

Das ist kein Unsinn  - sondern leider eine tatsache. Wenn ich deine 
Aufmerksamkeit mal auf das hier zB lenken darf:

http://xml.apache.org/xerces2-j/faq-dom.html#faq-3

Erst ab DOM level 3 (!) habe die daran gedacht, das man auch dokumente 
damit schreiben können soll... Ich gebe zu, ich hätte das gleich etwas 
detaillierter ausführen sollen.

> sonst willst Du ein XML Dokument über eine API manipulieren? Über SAX?

Äh - auch gerne SAX, warum nicht? Wenn ich Datenstrukuren serialisieren 
möchte, dann ist das üblicherweise _kein_ DOM, aber gerne ein Baum. Wenn 
ich aber eh den Datenbaum traversieren muss, um DOM zu generieren, das 
dann als XML rausgeprügelt wird - bei verdopplung des Speicherbedarfs - 
dann kann ich auch über SAX eine Ausgabe machen. Meistens jedenfalls.

DOM habe ich persönlich immer nur gebraucht wenn ich auf dem Baum 
gearbeitet habe - also XML eingelesen, und dann darauf operiert. Dafür 
ist es gut. Serialisieren - eher nicht, IMHO.

> Zu dem Problem: es gibt natürlich auch in Minidom einen Document() 
> Knoten, den man als erstes anlegt und dann die Elemente dran klatscht:
> 
> from xml.dom.minidom  import Document
> 
> doc = Document()
> node1 = doc.createElement('foobar')
> doc.appendChild(node)
> 
> print doc.toxml(encoding='utf-8')

> Man beachte auch, dass der 'encoding'  Parameter explizit gesetzt werden 
> muß, wenn man das Encoding in der Präambel haben möchte. Ansonsten wird 
> es ausgelassen und es gilt der allgemeine Default Utf8.

Schön das es funktioniert. Aber da es nicht Standard ist, kann man auch 
gleich zu anderen lösungen wie (c)element-tree greifen - da ist die API 
deutlich pythonischer.


MfG Diez