lxml und xpath

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
marlob
User
Beiträge: 51
Registriert: Mittwoch 23. August 2006, 20:13

Hallo,

ich habe folgende graphml-Datei
http://paste.pocoo.org/show/145977/

Daraus möchte ich alle Elemente <node> und <edge> auslesen.
Weiterhin benötige ich vom Element node
das Attribut id und den Text vom Unterelement NodeLabel
und vom Element edge
die Attribute target und source und den Text vom Unterelement EdgeLabel.
Das gelingt mir mit folgendem Code auch


Code: Alles auswählen

from lxml import etree

def main():
    tree = etree.parse("testsfc.graphml")
    for node in tree.xpath(".//*[local-name()='node']"):
        print "node", node.get('id'), node.xpath("string()").strip()

    for edge in tree.xpath(".//*[local-name()='edge']"):
        print "edge", edge.get('source'), edge.get('target'), \
              edge.xpath("string()").strip()

if __name__ == '__main__':
    main()
Nur gefällt mir hier der Teil
node.xpath("string()").strip()
aus der print-Anweisung nicht, da ich mir ja sicher sein will,
das der Text immer vom Element NodeLabel kommen soll.

Wie kann ich das besser lösen? Vielleicht kann mir ja jemand helfen?

gruss
marlob
marlob
User
Beiträge: 51
Registriert: Mittwoch 23. August 2006, 20:13

Sorry,
aber irgendwas habe ich an den Code-Tags falsch gemacht :oops:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

marlob hat geschrieben:Sorry,
aber irgendwas habe ich an den Code-Tags falsch gemacht :oops:
Dann nutze die "edit"-Funktion des Boards und repariere das einfach ;-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wenn man BBCode deaktiviert, funktionieren die Tags logischerweise nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
marlob
User
Beiträge: 51
Registriert: Mittwoch 23. August 2006, 20:13

Danke für die Hinweise :-) Hatte es wohl etwas zu eilig ;-)
Antworten