Seite 1 von 1

Funktionsaufrufe in XML einbetten

Verfasst: Sonntag 4. Dezember 2005, 01:04
von poetika
Wenn ich in Python XML Parse, kann ich in das XML direkte Funktionsaufrufe reinpacken, die ich im Anschluss nach dem Parsen direkt aufrufe?
Beispiel:
<BereichA funk=“berechneUmfang(x,y)“>
…..
Kann mir da einer Tipp geben wie man so was in Python geht?

Verfasst: Sonntag 4. Dezember 2005, 19:35
von rayo
Hi

Das könntest du mit

Code: Alles auswählen

res = eval("berechneUmfang(x,y)")
machen, aber man muss aufpassen dass der String vorher auf Gültigkeit überprüft wird, da sonst irgendwelcher Code ausgeführt werden könnte.


Gruss

Verfasst: Montag 5. Dezember 2005, 08:16
von jens
Also eval wäre sicherlich ein schneller Hack mit erfolg :) Aber schön ist was anderes...

Was ist mit einer Template Engine, die das automatisch erledigen kann??? s. http://pythonwiki.pocoo.org/Template_Engines

Verfasst: Montag 5. Dezember 2005, 17:46
von rayo
Kommt natürlich auf die Grösse des ganzen an, aber eine Template Engine würd ich für das ganze nicht nehmen. ich würde einfach eid Dictionary machen der die Funktionsnamen in XML in die von Python mapped.

Und wenn die Parameter der Funktionen im XML stehen kann man einfach nach dem Namen suchen.

halb Pseudocode:

Code: Alles auswählen

functions = { 'berechneUmfang': berechneUmfang }

func, params = xmlnode.get('Funk').split('(') # -> ("berechneUmfang", "x,y)")
params = params[:-1].split(',') # -> ("x", "y")
params = [xmlnode2.getParam(n) for x in params]
functions[func](*params)
Also so würde mal halbwegs sowas aussehen.

Verfasst: Montag 5. Dezember 2005, 17:48
von poetika
Hmm der Vorschlag von rayo ist für mich nützlicher. Die Template engine ist auch eine gute Lösung aber nicht effektiv genug für mein nutzen. Ich will XML parsen und mit den Funktionen die dort eingebetten sind will ich einen Entscheidungsbaum runterhangeln, je nach Rückgabewert der Funktion.

Ich bin gerade dabei zu schauen ob eval wirklich die Lösung ist. Was ist der genaue Unterschied zwischen eval und exec aus der Sicht der Mächtigkeit bzw. der Möglichkeiten?

Danke an rayo und jens :)

Verfasst: Montag 5. Dezember 2005, 18:25
von rayo
Hi

Den unterschied kannst du in der Doc nachlesen:
http://docs.python.org/lib/built-in-funcs.html

Unter der Funktion eval oder execfile (execfile ist das selbe wie exec einfach anstatt einen string nimmt es eine datei)

Gruss