Consider the following XML fragment:
<func arg1="value1" arg2="value2" />
XML functions may also have a body. It is evaluated to "body" argument. Thus
<func arg1="value1" arg2="value2">some text</func>
is translated to func(arg1='value1', arg2='value2', body='some text')
In example above all function arguments were constant values. But they also can be evaluated:
<foo arg="value"> <bar/> </foo>
body_value = bar() foo(arg='value', body=body_value)
def foo(**kwargs): return "foo" def bar(**kwargs): return "bar"
then <func><foo/> - <bar/></func>
will result in func(body = 'foo - bar')
Function parameters can also be function calls using <parameter> tag
<foo arg="value"/>
<foo> <parameter name="arg">value</parameter> </foo>
<foo> <parameter name="arg"><bar/></parameter> </foo>