XML zugriff auf bestimmte Tags

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
Peter1977
User
Beiträge: 86
Registriert: Mittwoch 4. September 2013, 14:59

Hallo,

für meine Video DB möchte ich die möglichkeit haben auf XML Dateien zuzugreifen und zu Parsen.
die XML Datei hat diese Struktur

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<ofdbgw>
<status>
<rcode>0</rcode>
<rcodedesc>Ok</rcodedesc>
<modul>movie</modul>
<ofdbgwversion>1.23</ofdbgwversion>
<ofdbgwdate>2013-01-22</ofdbgwdate>
<verarbeitungszeit>0.048</verarbeitungszeit>
</status>
<resultat>
<titel>Going Postal</titel>
<jahr>2010</jahr>
<bild>http://img.ofdb.de/film/194/194138.jpg</bild>
<imdbid>1219817</imdbid>
<bewertung>
<note>6.54</note>
<stimmen>52</stimmen>
<platz>4172</platz>
</bewertung>
<regie>
<person>
<id></id>
<name>Jon Jones</name>
</person>
</regie>
<secondunitregie></secondunitregie>
<produzent></produzent>
<drehbuch>
<person>
<id>6817</id>
<name>Terry Pratchett</name>
</person>
</drehbuch>
<cut></cut>
<soundtrack></soundtrack>
<genre>
<titel>Fantasy</titel>
<titel>Komödie</titel>
</genre>
<kurzbeschreibung>Willkommen auf der Scheibenwelt, die von 4 Elefanten getragen, auf einer riesigen Schildkröte durchs All schwebt. Wir kommen gerade rechtzeitig zur geplanten</kurzbeschreibung>
<beschreibung>Willkommen auf der Scheibenwelt, die von 4 Elefanten getragen, auf einer riesigen Schildkröte durchs All schwebt. Wir kommen gerade rechtzeitig zur geplanten Hinrichtung des Gauners Moist von Lipwig, der allerdings vom Patrizier Lord Vetinari in letzter Sekunde "begnadigt" wird. Als Gegenleistung soll er den schon lange stagnierenden Postbetrieb wieder in Gang bringen. Reacher Gilt vom "Großen Strang der Klacker" ist die Wiedereinführung der Post ein Dorn im Auge, gefährdet sie doch das Monopol der Semaphorgesellschaft auf die Nachrichtenübermittlung. 

Ein erbitterter Wettstreit entbrennt zwischen Postkutsche und Klackertürmen. Und allerlei obskure Gestalten, wie Golems, eine Werwolfswache, ein Banshee-Auftragskiller und natürlich die Magier der unsichtbaren Universität werden in den Studel aus Intrigen, Schuld und Sühne hineingezogen. Was geschah wirklich mit den 4 vorherigen Postmeistern? Wer hat in der Nachrichtenübermittlung am Ende die Nase vorn?</beschreibung>
<besetzung>
<person>
<id>22105</id>
<name>Richard Coyle</name>
<rolle>Moist Von Lipwig</rolle>
</person>
<person>
<id>10745</id>
<name>David Suchet</name>
<rolle>Reacher Gilt</rolle>
</person>
<person>
<id>48176</id>
<name>Claire Foy</name>
<rolle>Adora Belle Dearheart</rolle>
</person>
<person>
<id>6207</id>
<name>Andrew Sachs</name>
<rolle>Groat</rolle>
</person>
<person>
<id>19846</id>
<name>Charles Dance</name>
<rolle>Lord Vetinari</rolle>
</person>
<person>
<id>48892</id>
<name>Timothy West</name>
<rolle>Ridcully</rolle>
</person>
<person>
<id>37299</id>
<name>Steve Pemberton</name>
<rolle>Drumknott</rolle>
</person>
<person>
<id>48916</id>
<name>Tamsin Greig</name>
<rolle>Miss Crpslock</rolle>
</person>
<person>
<id>53934</id>
<name>Madhav Sharma</name>
<rolle>Crispin Horsefry</rolle>
</person>
<person>
<id>53805</id>
<name>Jimmy Yuill</name>
<rolle>Mr. Spools</rolle>
</person>
<person>
<id>38264</id>
<name>Ingrid Bolsø Berdal</name>
<rolle>Sergeant Angua</rolle>
</person>
<person>
<id>35456</id>
<name>Paula Lane</name>
<rolle>Princess</rolle>
</person>
<person>
<id>28028</id>
<name>Matt Devere</name>
<rolle>Parker</rolle>
</person>
<person>
<id>6817</id>
<name>Terry Pratchett</name>
<rolle>Postman</rolle>
</person>
<person>
<id></id>
<name>Paul Barber</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>John Henshaw</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Ian Bonar</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Marnix Van Den Broeke</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Adrian Schiller</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Daniel Cerqueira</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Ben Crompton</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Asif Khan</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Alex Price</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Gabrielle Hamilton</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Tamás Mohai</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Anna Györgyi</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Angéla Eke</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Mike Kelly</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Szabolcs Thuróczy</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Don Warrington</name>
<rolle></rolle>
</person>
</besetzung>
<produktionsland>
<name>Großbritannien</name>
</produktionsland>
<alternativ>Going Postal</alternativ>
<fassungen>
<titel>
<land>Deutschland</land>
<id>194138;308801</id>
<name>DVD: NewKSM</name>
</titel>
<titel>
<land>Deutschland</land>
<id>194138;339923</id>
<name>Blu-ray Disc: KSM</name>
</titel>
<titel>
<land>Deutschland</land>
<id>194138;332368</id>
<name>Blu-ray Disc: NEW KSM  (Limited Edition)</name>
</titel>
<titel>
<land>Deutschland</land>
<id>194138;360423</id>
<name>Free-TV: RTL  HD</name>
</titel>
</fassungen>
</resultat>
</ofdbgw>
mit Titel, Jahr, Beschreibung habe ich keine Probleme die erhalte ich schon in richtiger Form

Das Problem ist wie greife ich auf die Besetzung zu

Code: Alles auswählen

<besetzung>
<person>
<id>22105</id>
<name>Richard Coyle</name>
<rolle>Moist Von Lipwig</rolle>
</person>
<person>
<id>10745</id>
<name>David Suchet</name>
<rolle>Reacher Gilt</rolle>
</person>
<person>
<id>48176</id>
<name>Claire Foy</name>
<rolle>Adora Belle Dearheart</rolle>
</person>
<person>
<id>6207</id>
<name>Andrew Sachs</name>
<rolle>Groat</rolle>
</person>
<person>
<id>19846</id>
<name>Charles Dance</name>
<rolle>Lord Vetinari</rolle>
</person>
<person>
<id>48892</id>
<name>Timothy West</name>
<rolle>Ridcully</rolle>
</person>
<person>
<id>37299</id>
<name>Steve Pemberton</name>
<rolle>Drumknott</rolle>
</person>
<person>
<id>48916</id>
<name>Tamsin Greig</name>
<rolle>Miss Crpslock</rolle>
</person>
<person>
<id>53934</id>
<name>Madhav Sharma</name>
<rolle>Crispin Horsefry</rolle>
</person>
<person>
<id>53805</id>
<name>Jimmy Yuill</name>
<rolle>Mr. Spools</rolle>
</person>
<person>
<id>38264</id>
<name>Ingrid Bolsø Berdal</name>
<rolle>Sergeant Angua</rolle>
</person>
<person>
<id>35456</id>
<name>Paula Lane</name>
<rolle>Princess</rolle>
</person>
<person>
<id>28028</id>
<name>Matt Devere</name>
<rolle>Parker</rolle>
</person>
<person>
<id>6817</id>
<name>Terry Pratchett</name>
<rolle>Postman</rolle>
</person>
<person>
<id></id>
<name>Paul Barber</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>John Henshaw</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Ian Bonar</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Marnix Van Den Broeke</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Adrian Schiller</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Daniel Cerqueira</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Ben Crompton</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Asif Khan</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Alex Price</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Gabrielle Hamilton</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Tamás Mohai</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Anna Györgyi</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Angéla Eke</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Mike Kelly</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Szabolcs Thuróczy</name>
<rolle></rolle>
</person>
<person>
<id></id>
<name>Don Warrington</name>
<rolle></rolle>
</person>
</besetzung>
Die Besetzung hat ja jetzt die Tags name und Rolle.
wie greife ich jetzt richtig auf die Tags name in den Tag Besetzung zu?

weil das tag name habe ich auch zb bei den Tag Regie

Code: Alles auswählen

<regie>
<person>
<id></id>
<name>Jon Jones</name>
</person>
</regie>
hier noch der Python3.4 Code

Code: Alles auswählen

class FilmInfoHandler(handler.ContentHandler):
    def __init__(self):
        self.beschreibung=set()
        self.person=set()
        
        self.current_content=""
        
    def startElement(self,name,attrs):
        self.current_content =""
    
    def characters(self,content):
        self.current_content +=content.strip()
        
    def endElement(self,name):
        if name=="beschreibung":
            self.beschreibung.add(self.current_content)
        if name=="name":
            self.person.add(self.current_content)
        
    def getbeschreibung(self):
        return self.beschreibung
    
    def getperson(self):
        return self.person
BlackJack

@Peter1977: Das sieht irgendwie nicht nach der ElementTree-API aus. Den DOM-Kram benutzt eingentlich keiner dem seine geistige Gesundheit lieb ist. ;-)

Die `get*()`-Methoden bei Deiner Klasse sind ausserdem überflüssig.
Peter1977
User
Beiträge: 86
Registriert: Mittwoch 4. September 2013, 14:59

Hallo,

ja das ist nicht ElementTree-Api sondern xml.sax

wie sieht das mit der ElementTree aus?
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@Peter1977: sax benutzt eigentlich niemand, der nicht einen wirklich guten Grund dafür hat. ElementTree hat für Dein Problem die find-Methode.
Peter1977
User
Beiträge: 86
Registriert: Mittwoch 4. September 2013, 14:59

Hallo,

versuche mich gerade in ElementTree,

kennt einer gute Beispiele zu ElementTree?

mfg Peter
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@Peter1977: Sehr gut ist natürlich das Tutorial. Und für Deine Zwecke sind die Beispiele hier ganz nützlich.
Peter1977
User
Beiträge: 86
Registriert: Mittwoch 4. September 2013, 14:59

Hallo,

Danke funkioniert in groben zügen mal.

mfg Peter
Antworten