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

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?
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

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:

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 -.-
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Dienstag 23. Oktober 2007, 15:50

Schau dir mal die XPath-Syntax an.
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:

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.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
HarryPython
User
Beiträge: 60
Registriert: Freitag 8. Juni 2007, 07:39

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
Antworten