Seite 1 von 1
XML-Baum in Klasse abbilden
Verfasst: Dienstag 23. Oktober 2007, 10:22
von nkoehring
Hallo...
ich moechte einen XML-Baum in einer Klasse abbilden, damit ich damit so aehnlich umgehen kann, wie zB bei BeautifulStoneSoup:
Gibts da bereits einen einfachen Weg, der mich an einer selbstgebauten rekursiven Funktion vorbei fuehrt, aber auch in der StandardLibrary enthalten ist?
Verfasst: Dienstag 23. Oktober 2007, 13:50
von Y0Gi
Was spricht gegen ElementTree?
Verfasst: Dienstag 23. Oktober 2007, 15:09
von nkoehring
Kann ich denn mit ElementTree so arbeiten? Entweder ich mache es falsch oder es ist mir einfach zu umstaendlich und vorallem unuebersichtlich, statt
sowas wie
Code: Alles auswählen
root.find(namespace+"something").find(namespace+"foo").find(namespace+"bar").text
tippen zu mussen -.-
Verfasst: Dienstag 23. Oktober 2007, 15:50
von Y0Gi
Schau dir mal die XPath-Syntax an.
Verfasst: Dienstag 23. Oktober 2007, 16:00
von BlackJack
Wenn's auch etwas ausserhalb der Standardbibliothek sein darf:
http://codespeak.net/lxml/objectify.html
Verfasst: Dienstag 23. Oktober 2007, 16:05
von nkoehring
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.
Verfasst: Mittwoch 24. Oktober 2007, 09:57
von HarryPython
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