XML Elementinhalt auslesen- minidom

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Flo668
User
Beiträge: 39
Registriert: Mittwoch 23. Juli 2008, 10:41

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'
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Flo668
User
Beiträge: 39
Registriert: Mittwoch 23. Juli 2008, 10:41

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Flo668
User
Beiträge: 39
Registriert: Mittwoch 23. Juli 2008, 10:41

Okay ich verstehe das Ganze ja, komme aber nicht an die Textnodes. Gibt es irgendwo eine brauchbare Übersicht zu getElementsByName(), inklusive Rückgabetypen etc?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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)
Antworten