![]() |
![]() | ![]() | ![]() | Altova Mailing List Archives>Archive Index >microsoft.public.xsl Archive Home >Recent entries >Thread Prev - [XSLT]: Recursive Function to Add/Multiply [Thread Next] Re: [XSLT]: Recursive Function to Add/MultiplyTo: NULL Date: 12/2/2006 3:11:00 AM
This should do the trick I think:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--
<m value="10">
<i value="5">
<m value="10">
<i value="2"/>
<i value="2"/>
<i value="2"/>
</m>
</m>
10 * (5 + (10 * (2 + 2 + 2)))
-->
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="m">
<xsl:value-of select="@value"/>
<xsl:if test="child::*"> * (<xsl:apply-templates
select="*[1]"/>)</xsl:if>
</xsl:template>
<xsl:template match="i">
<xsl:value-of select="@value"/>
<xsl:if test="following-sibling::*"> + <xsl:choose>
<xsl:when
test="(following-sibling::*)[1]/*">(<xsl:apply-templates
select="(following-sibling::*)[1]"/>)</xsl:when>
<xsl:otherwise>
<xsl:apply-templates
select="(following-sibling::*)[1]"/>
</xsl:otherwise>
</xsl:choose></xsl:if>
</xsl:template>
</xsl:stylesheet>
"[Gizmo]" <nuno.carlos.viana@g...> wrote in message
news:1160382062.771240.215790@c......
> Hi guys, I have been browsing your forums on a daily basis and have
> found
> many answers to many of my problems! Thanks!!!
>
> I now need your help!
>
> I have the following XML file, which represents expressions with "+"
> and "*"
> artihmentic operands:
>
> <m value="10">
> <i value="5"/>
> <m value="10">
> <i value="2"/>
> <i value="2"/>
> <i value="2"/>
> </m>
> </m>
>
> This represents the following expression:
> 10 * (5 + (10 * (2 + 2 + 2)))
>
> I want to compute the expression's value (for the given example, the
> result
> should be 650).
>
> Can anyone help me achieve this through a single recursive template?
>
> Many thanks to you all!
>
> Nuno
>
| ![]() | ![]() | ![]() |
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | |||||
|
