[Python-de] String Interpolation in ElementTree implementieren

Florian Lindner mailinglists at xgm.de
Mo Sep 24 11:05:13 CEST 2012


Am Sonntag, 23. September 2012, 13:58:05 schrieb Diez B. Roggisch:
> Ich würde die einfach eine templating engine wie zb genshi empfehlen. Die
> kann das und kümmert sich um all die Details.

Hallo,

ich habe mir Genshi eben mal angeschaut und für meinen Anwendungszweck ist das 
Overkill.

Eine Möglichkeit in Python der ElementTree Klasse eine eigenes, von Element 
abgeleitete Klasse unterzuschieben gibt es nicht?

Wie würde man sonst an das Problem rangehen: Ich will das Verhalten einer 
Klasse modfizieren, die selten direkt instanziert wird, sondern idR von 
Factory-Funktionen zurückgegben wird.

Grüße,
Florian


> Am 23.09.2012 um 12:23 schrieb Florian Lindner <mailinglists at xgm.de>:
> > Hallo,
> > 
> > ich will erreichen, dass man in XML Ersetzungen einbetten kann, also:
> > 
> > <root filesystem="{filesystem}">
> > {files}
> > </root>
> > 
> > ich habe ein Dictionary repl = {"filesystem" : "btrfs", "files" :
> > "whatever"} und würde das beim parsen des XML einfach mitgeben und
> > bekomme dann die Strings schon fertig eingesetzt zurück. Ersetzt werden
> > sollen Attribute und Text.
> > 
> > Hier fängt das Problem an. Als XML-API benutze ich ElementTree.
> > 
> > Das einfachste wäre wohl, wenn der ElementTree benutzende Code sich selber
> > drum kümmert:  str = interpolate(node.attrib["filesystem"], repl). Oder
> > halt einfach direkt .format aufruft.
> > 
> > Mir wäre es aber am liebsten, wenn ich das weitgehend transparent
> > einbinden
> > könnte. Wenn ich nun von xml.etree.ElementTree.ElementTree ableite und die
> > Methoden text und attrib überschreibe, ok... Nur müsste ich wohl auch
> > sämtliche Funktionen modifizieren, die ElementTrees zurückgeben (damit sie
> > meine Kindklasse zurückgeben) und das wäre dann wohl doch recht viel
> > Aufwand.
> > 
> > Wie macht man sowas am geschicktesten?



Mehr Informationen über die Mailingliste python-de