Kapitel 26
XML
726
26.5 Das Modul xml.dom.minidom
Das DOM (Document Object Model) ist ein Application Interface (API), eine Schnittstelle also
und somit ein Standard, der von der Implementierung in einer bestimmten Programmier-
sprache abstrahiert. Festgelegt werden im Prinzip lediglich die Namen von Klassen, Attributen
und Methoden und natürlich deren Bedeutung. Offen gelassen ist dagegen, wie die Methoden
implementiert werden. DOM ist sprachübergreifend, das heißt, z.B. auch in Java-Implemen-
tierungen werden Bezeichnungen wie
Element und getElementsByTagName() verwendet.
Man braucht also nicht umzulernen, wenn man die Programmiersprache wechselt.
Im Python-Modul
xml.dom.minidom sind die wichtigsten Features des DOM-Level 1 und
-Level 2 implementiert. Vieles ist weggelassen und einige Details sind zur Vereinfachung
etwas abgewandelt. So werden z.B. für Fehlermeldungen Python-Standardobjekte wie
ValueError an Stelle spezieller Fehlerobjekte aus dem DOM-Standard verwendet. Außer-
dem besitzen die Klassen des Moduls einige nützliche zusätzliche Methoden, die nicht im
DOM-Standard enthalten sind.
Der DOM-Standard und auch das bereits reduzierte Modul
xml.dom.minidom sind zu kom-
plex, um im Rahmen dieses Buches vollständig behandelt zu werden. Wir beschränken uns
auf einige Features der Klassen
Node, Document, Element und Text.
26.5.1 XML-Dokumente und DOM-Objekte
Eine XML-Anwendung enthält meist folgenden typischen Ablauf:
Erzeuge aus einem XML-Dokument ein DOM-Objekt (Parsing).
Verarbeite das DOM-Objekt (Daten herauslesen, neue Elemente einfügen, Elemente
verändern).
Erzeuge aus dem (geänderten) DOM-Objekt ein textuelles XML-Dokument, das man
z.B. speichern kann.
Werfen wir einen etwas genaueren Blick auf den Zusammenhang zwischen XML-Doku-
menten und DOM-Objekten. Abbildung 26.3 illustriert die Beziehung zwischen XML und
DOM anhand eines Ausschnitts aus dem Eingangsbeispiel.
Abb. 26.3: XML-Dokument und zugehöriges DOM-Objekt
<?xml version="1.0" ?>
<person>
<name>
Tom Kahlenbaum
</name>
<email>
tk@global-design.de
</email>
</person>
:Document
:Element
:Text
:Element
:Element
:Text
parse()
parseString()
.toxml()
.toprettyxml()
tagName = u'person'
data = u'tk@global-design.de'
tagName = u'name'
tagName = u'email'
data = u'Tom Kahlenbaum'
727
26.5
Das Modul xml.dom.minidom
Auf der linken Seite steht ein für Menschen lesbarer Text mit dem XML-Dokument und auf
der rechten Seite ein UML-Objektdiagramm, das das zugehörige DOM-Objekt beschreibt.
Dieses ist ein Aggregat aus Python-Objekten der Klassen
Document, Element und Text, die
im Modul
xml.dom.minidom definiert sind.
Das Modul
xml.dom.minidom enthält außerdem zwei Factory-Funktionen parse() und
parseString(), mit denen man aus einem XML-Text ein DOM-Objekt erzeugen kann
(Tabelle 26.1). Um umgekehrt aus dem DOM-Objekt ein XML-Dokument (Unicode-Zei-
chenkette) zu erhalten, verwendet man die Methoden
toxml() oder toprettyxml(). Letz-
tere Methode fügt Zeilenumbrüche und Einrückungen ein, so dass das Resultat besser
lesbar ist. Beide Methoden gehören nicht zum DOM-Standard.
Das Besondere ist, dass jeder Knoten der DOM-Struktur diese Methoden besitzt. Somit ist
es möglich, für Teilbäume eines DOM-Objektes eine textuelle XML-Darstellung zu gewin-
nen. Ein Methodenaufruf der Form
liefert das XML-Dokument, das durch den Teilbaum mit Wurzel
node repräsentiert wird.
Dieser Teilbaum ist der Knoten
node selbst und alle seine Nachkommen (Kinder, Kinder der
Kinder usw.). Der folgende Dialog illustriert dies:
node.toxml()
>>> xmldoc = """<?xml version="1.0" ?>
<person>
<name>Tom Kahlenbaum</name>
<email>tk@global-design.de</email>
</person>"""
>>> doc = parseString(xmldoc)
>>> print(doc.toxml()) # komplettes XML-Dokument
<?xml version="1.0" ?>
<person>
<name>Tom Kahlenbaum</name>
<email>tk@global-design.de</email>
</person>
>>> person = doc.documentElement
>>> print(person.toxml()) # Teilbaum mit Wurzel person
<person>
<name>Tom Kahlenbaum</name>
<email>tk@global-design.de</email>
</person>
>>> name = doc.getElementsByTagName("name")[0]
>>> print(name.toxml()) # Teilbaum mit Wurzel name
<name>Tom Kahlenbaum</name>

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.