=============== Python: XML-Dom =============== .. index:: Python: DOM Lernziel ======== Neben dem SAX-Parser können Sie auch einen DOM-Parser zur Bearbeitung von XML-Dateien einsetzen. Das XML-Dokument wird als Baum-Struktur im Speicher gehalten. Im Unterschied zum SAX-Parser kann der DOM-Baum manipuliert werden, z.B. durch hinzufügen, entfernen oder ändern von Elementen und Attributen. Aufgaben ======== 1. Erstellen Sie mit Hilfe des minidom-Modules eine eigene XML-Datei. 2. Speichern Sie diese nach der Erstellung in einer Datei ab. Beispiele zum Öffnen einer Datei ================================ Für die Bearbeitung einer XML-Datei muß diese geöffnet und eingelesen werden. Die Beispiele mit *dom1* und *dom2* benutzen Dateien, *dom3* erhält ein neues XML-Dokument aus einer Zeichenkette. .. code-block:: python :linenos: from xml.dom.minidom import parse, parseString dom1 = parse('c:\\temp\\mydata.xml') datasource = open('c:\\temp\\mydata.xml') dom2 = parse(datasource) dom3 = parseString('Some data some more data') Ausgabe der Teile eines DOM =========================== Hier ein Beispiel, wie ein XML-Baum ausgegeben werden kann. .. code-block:: python :linenos: import xml.dom.minidom document = """\ Demo slideshow Slide title This is a demo Of a program for processing slides Another demo slide It is important To have more than one slide """ dom = xml.dom.minidom.parseString(document) def getText(nodelist): rc = "" for node in nodelist: if node.nodeType == node.TEXT_NODE: rc = rc + node.data return rc def handleSlideshow(slideshow): print "" handleSlideshowTitle(slideshow.getElementsByTagName("title")[0]) slides = slideshow.getElementsByTagName("slide") handleToc(slides) handleSlides(slides) print "" def handleSlides(slides): for slide in slides: handleSlide(slide) def handleSlide(slide): handleSlideTitle(slide.getElementsByTagName("title")[0]) handlePoints(slide.getElementsByTagName("point")) def handleSlideshowTitle(title): print "%s" % getText(title.childNodes) def handleSlideTitle(title): print "

%s

" % getText(title.childNodes) def handlePoints(points): print "" def handlePoint(point): print "
  • %s
  • " % getText(point.childNodes) def handleToc(slides): for slide in slides: title = slide.getElementsByTagName("title")[0] print "

    %s

    " % getText(title.childNodes) handleSlideshow(dom)