ElementTree/XPath und dergleichen
Hallo, ich vermisse gerade in ElementTree wieder einmal etwas ent- fernt Ähnliches zu XPath (aber Einfacheres), auch weil man bei den beiden Methoden node.find(), node.findall() und node.findtext() zwingend den XML-Namensraum angeben muss, sofern im Wurzelelement deklariert. Nun habe ich etwas Code, der mir mit einem pfadartigen Aus- druck einen Ergebnis-String liefert, also einen Attribut- wert oder den Textinhalt eines Knotens. Meine Ausdrücke sehen wie folgt aus (hier für einen SVG-Wurzelknoten als Beispiel), mit Alternativen in ET 1.2 und 1.3 (letzteres nicht getestet): @viewBox .get("viewBox") [ET >= 1.2] title# .findtext("{...}title") [ET >= 1.2] g/rect@fill .find("{...}g/{...}rect").get("fill") [ET == 1.2] .find("{...}g/{...}rect[@fill]") [ET == 1.3] g/rect[2]@fill .findall("{...}g/{...}rect")[2].get("fill") [ET == 1.2] .find("{...}g/{...}rect[2][@fill]") [ET == 1.3] Nun finde ich nicht nur meine Notation kürzer, ich möchte auch keine weitere Abhängigkeiten von ET 1.3 zu meinem Code hinzufügen (von dem anscheinend noch gar kein Release vor- liegt). Und auch dann müsste ich noch die Namensräume spe- ziell behandeln. Daher folgende Fragen: Gibt es außer XPath irgendeinen an- deren (pythonischeren) Standard? Hat jemand hier etwas Ähn- liches implementiert? Gruß, Dinu
Dinu Gherman schrieb:
ich vermisse gerade in ElementTree wieder einmal etwas ent- fernt Ähnliches zu XPath
Dann benutze doch XPath. http://codespeak.net/lxml/
Daher folgende Fragen: Gibt es außer XPath irgendeinen an- deren (pythonischeren) Standard? Hat jemand hier etwas Ähn- liches implementiert?
lxml hat auch noch CSSSelect und ObjectPath zu bieten. http://codespeak.net/lxml/cssselect.html http://codespeak.net/lxml/objectify.html#objectpath Stefan
participants (2)
-
Dinu Gherman -
Stefan Behnel