XML-Baum in Klasse abbilden

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.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

XML-Baum in Klasse abbilden

Beitragvon nkoehring » Dienstag 23. Oktober 2007, 10:22

Hallo...

ich moechte einen XML-Baum in einer Klasse abbilden, damit ich damit so aehnlich umgehen kann, wie zB bei BeautifulStoneSoup:

Code: Alles auswählen

    root.sub.content
    root.sub2.subsub1.subsubsub.content


Gibts da bereits einen einfachen Weg, der mich an einer selbstgebauten rekursiven Funktion vorbei fuehrt, aber auch in der StandardLibrary enthalten ist?
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Dienstag 23. Oktober 2007, 13:50

Was spricht gegen ElementTree?
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Dienstag 23. Oktober 2007, 15:09

Kann ich denn mit ElementTree so arbeiten? Entweder ich mache es falsch oder es ist mir einfach zu umstaendlich und vorallem unuebersichtlich, statt

Code: Alles auswählen

root.something.foo.bar.contents[0]
sowas wie

Code: Alles auswählen

root.find(namespace+"something").find(namespace+"foo").find(namespace+"bar").text
tippen zu mussen -.-
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Dienstag 23. Oktober 2007, 15:50

Schau dir mal die XPath-Syntax an.
BlackJack

Beitragvon BlackJack » Dienstag 23. Oktober 2007, 16:00

Wenn's auch etwas ausserhalb der Standardbibliothek sein darf: http://codespeak.net/lxml/objectify.html
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Dienstag 23. Oktober 2007, 16:05

danke fuer die Tipps... ich hab nach Absprache nun doch einfach direkt auf BeautifulStoneSoup zurueck gegriffen...
Aber XPath schau ich mir trotzdem bei Gelegenheit mal an...

EDIT: Achja... gibts eigentlich nen direkten Weg mit BeautifulStoneSoup auf Elemente mit Strich im Namen zuzugreifen? Also alá root.bla.blub-mit-strich (was ja nun nicht geht, da der strich als minus interpretiert wird). Bisher muss ich dafuer etwas in der Richtung root.bla.findChild("blub-mit-strich") machen.
HarryPython
User
Beiträge: 60
Registriert: Freitag 8. Juni 2007, 07:39

Beitragvon HarryPython » Mittwoch 24. Oktober 2007, 09:57

Hi nkoehring


Vielleicht sowas:

Code: Alles auswählen

from xml.etree import cElementTree


blabla = cElementTree.parse("bla.xml")

blub = blabla.findall("//something")



for i in blub:
    knoten = self.tree_ctrl_1.AppendItem( i.find("somthingname").text)


Lösund ist das "//" dadurch sparst du dir das findfindfind...

Wie schon erwähnt ist xPath die Lösung
Hier findest du die Anleitung und die Bibliothek, die aber ab 2.5 wohl schon dabei sein soll. [/url]

Gruß
HarryPython

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder