recursion in xslt

admin

Administrator
Staff member
Hi,
I am a new user of XSLT. The XML file I am working is the expression 1+2*3 which I need to evaluate:

<simpl:expression xmlns:simpl='urn:simpl'>
<simpl: primitiveapplication>
<simpl: operator>+</simpl: operator>
<simpl:argument1>
<simpl:intconstant>1</simpl:intconstant>
</simpl:argument1>
<simpl:argument2>
<simpl: primitiveapplication>
<simpl: operator>*</simpl: operator>
<simpl: argument1>
<simpl:intconstant>2</simpl:intconstant>
</simpl:argument1>
<simpl:argument2>
<simpl:intconstant>3</simpl:intconstant>
</simpl:argument2>
</simpl: primitiveapplication>
</simpl:argument2>
</simpl: primitiveapplication>
</simpl:expression>


My current XSLT stylsheet can handle only expressions such as 1+2, 3*4, true|false etc where I have atmost 2 operands and looks like this:

<xsl:template match="/">
<xsl:variable name="op" select="/simpl: expression/simpl: primitiveapplication/simpl: operator">
</xsl: variable>
<xsl: variable name="arg1" select="/simpl: expression/simpl: primitiveapplication/simpl:argument1/simpl: intconstant">
</xsl:variable>
<xsl:variable name="arg2" select="/simpl:expression/simpl: primitiveapplication/simpl:argument2/simpl:intconstant">
</xsl:variable>
<xsl:variable name="boolarg1" select="/simpl:expression/simpl: primitiveapplication/simpl:argument1/simpl: boolconstant">
</xsl:variable>
<xsl:variable name="boolarg2" select="/simpl:expression/simpl: primitiveapplication/simpl:argument2/simpl:boolconstant">
</xsl:variable>
<xsl:choose>

<xsl:when test='$op="+"'>
<html><body><xsl:value-of select="$arg1 + $arg2"/></body></html>
</xsl:when>
...and so on.

Could someone tell me how to modify my current code so that I can cater to expressions such as 1+2*3 etc?
I would appreciate any help. Thank you.
 
Back
Top