Seite 1 von 1

XML Elementinhalt auslesen- minidom

Verfasst: Montag 8. September 2008, 10:18
von Flo668
Hi,

beim Parsen eines XML Files bekomme ich als Ausgabe leider nur:

[<DOM Element: pathurl at 0x35d4df0>]
[<DOM Element: timebase at 0x35cee18>, <DOM Element: timebase at 0x35d4f08>, <DOM Element: timebase at 0x35da198>]
[<DOM Element: duration at 0x35cec60>, <DOM Element: duration at 0x35d4fd0>, <DOM Element: duration at 0x35da738>]
[<DOM Element: in at 0x35ceee0>]
[<DOM Element: out at 0x35cef80>]
Es werden schon die richtigen Knoten gefunden, jetzt fragt sich nur, wie ich an den Elementinhalt der Sachen komme.


Der Code sieht etwa so aus:

Code: Alles auswählen

    def __init__(self, xmlpath):

    
           
            self._doc = minidom.parse(xmlpath)
            self._clipitems = self._getClipItemList()
            self._extractRelevantChunks()
            self._isSuceeded = True

    def _getClipItemList(self):
        return self._doc.getElementsByTagName('clipitem')

    def _extractRelevantChunks(self):

        for item in self._clipitems:
            chunk = CommandElements()
            chunk.uri = item.getElementsByTagName('pathurl')
            chunk.timebase = item.getElementsByTagName('timebase')
            chunk.duration = item.getElementsByTagName('duration')
            chunk.iin = item.getElementsByTagName('in')
            chunk.out = item.getElementsByTagName('out')
            chunk.sstring = item.getElementsByTagName('sstring')
            chunk.isComplete = True
            self._litChunks.append(chunk)

    def getListOfChunks(self):
        if self._isSuceeded == True:
            return self._litChunks
        else:
            return False

class CreateCommand():
    _list = ()
    def __init__(self, allTheChunks):

        self._list = allTheChunks
        self._printData()

    def _printData(self):
        tkMessageBox.showerror(title = 'Info', message = 'Start Printing')
        for ce in self._list:
            tkMessageBox.showerror(title = 'Info', message = 'Element Found')
            print 'NEUES ELEMENT \n'
            print ce.uri, '\n'
            print ce.timebase, '\n'
            print ce.duration, '\n'
            print ce.iin, '\n'
            print ce.out, '\n'
            print ce.sstring, '\n'
            print '\n'

Verfasst: Montag 8. September 2008, 10:34
von Leonidas

Code: Alles auswählen

ce.childNodes[0].nodeValue
D.h. du brauchst erstmal den DOM Text Node und davon kannst du dann den Text auslesen.

Ich habe ja zum Glück schon ewig kein DOM mehr nutzen müssen :)

Verfasst: Montag 8. September 2008, 10:46
von Flo668
Danke schonmal.
Heisst das, dass ich wenn ich per getElementsByTagName() einen Knoten gefunden habe, danach dessen Text Child Node aufrufen muss?

also ungefähr:

Code: Alles auswählen

chunk.uri = item.getElementsByTagName('pathurl')
n = chunk.uri.childNodes[0].nodeValue

Verfasst: Montag 8. September 2008, 10:51
von Leonidas
Der Text zwischen den Tags ist bei DOM in den Text-Nodes gespeichert, wenn du den haben willst, wirst du wohl auch auf diese Nodes zugreifen müssen. Ich habe auch bisschen gebraucht um festzustellen, dass die Tags selbst kein nodeValue haben.

Verfasst: Montag 8. September 2008, 12:23
von Flo668
Okay ich verstehe das Ganze ja, komme aber nicht an die Textnodes. Gibt es irgendwo eine brauchbare Übersicht zu getElementsByName(), inklusive Rückgabetypen etc?

Verfasst: Montag 8. September 2008, 12:36
von Hyperion
Flo668 hat geschrieben:Okay ich verstehe das Ganze ja, komme aber nicht an die Textnodes. Gibt es irgendwo eine brauchbare Übersicht zu getElementsByName(), inklusive Rückgabetypen etc?
Was bedeutet "komme nicht ran"? Du meinst Die Nodes oder den Inhalt? Letzteres sollte mit .data gehen! (http://diveintopython.org/xml_processin ... g_xml.html)