[Python-de] ElementTree/XPath und dergleichen

Dinu Gherman gherman at darwin.in-berlin.de
Di Nov 11 18:09:08 UTC 2008


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 at 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




Mehr Informationen über die Mailingliste python-de