Funktionsaufrufe in XML einbetten

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
poetika
User
Beiträge: 2
Registriert: Sonntag 4. Dezember 2005, 00:44

Sonntag 4. Dezember 2005, 01:04

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?
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Sonntag 4. Dezember 2005, 19:35

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
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 5. Dezember 2005, 08:16

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Montag 5. Dezember 2005, 17:46

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.
poetika
User
Beiträge: 2
Registriert: Sonntag 4. Dezember 2005, 00:44

Montag 5. Dezember 2005, 17:48

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 :)
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Montag 5. Dezember 2005, 18:25

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
Antworten