XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
noor  Subject: How to add a string with math operators ?
Author: noor
Date: 10 Apr 2009 03:52 AM
Hi all,

May i know how to add a string with math operators ?

For example,

a variable has "30 + 40 + 10"
and i get the result as "80"

Please help me to get this...

Postnext
Tony LavinioSubject: How to add a string with math operators ?
Author: Tony Lavinio
Date: 10 Apr 2009 06:34 AM
There is no standard way in XSLT to evaluate the contents of a
variable as code.

You might want to look into the saxon:evaluate() extension function.
See http://www.saxonica.com/documentation/extensions/functions/evaluate.html

Postnext
John BamptonSubject: How to add a string with math operators ?
Author: John Bampton
Date: 10 Apr 2009 06:49 AM
If you have a variable with a value of something like '30 + 40 + 10' then you could use the following XSL to output the value

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<xsl:variable name="string" select=" '30 + 40 + 10' "></xsl:variable>
<xsl:call-template name="sumstring">
<xsl:with-param name="string" select="$string"></xsl:with-param>
<xsl:with-param name="sum" select="0"></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="sumstring">
<xsl:param name="string"></xsl:param>
<xsl:param name="sum"></xsl:param>
<xsl:choose>
<xsl:when test="string-length($string)">
<xsl:variable name="firstnumber" select="
if ( contains($string,'+') )
then number(substring-before($string,'+'))
else number($string) "></xsl:variable>

<xsl:variable name="currentsum" select="$sum + $firstnumber"></xsl:variable>

<xsl:variable name="newstring" select="if ( contains($string,'+') )
then substring-after($string,'+')
else '' "></xsl:variable>

<xsl:call-template name="sumstring">
<xsl:with-param name="string" select="$newstring"></xsl:with-param>
<xsl:with-param name="sum" select="$currentsum"></xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$sum"></xsl:value-of>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

Cheers, John Bampton.

Postnext
noor  Subject: How to add a string with math operators ?
Author: noor
Date: 10 Apr 2009 09:03 AM
Very thanks to John and Tony.

I has another question,

Can we achieve this (john's) approach in xsl version 1.0, rather than using 2.0

So, i need to run it in xsl version 1.0 ?
please give me the solution ...

Postnext
John BamptonSubject: How to add a string with math operators ?
Author: John Bampton
Date: 10 Apr 2009 12:37 PM
It was a simple modification to the 2.0 code, you really should be doing some tutorials before you ask such basic questions

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:template match="/">
<xsl:variable name="string" select=" '30 + 40 + 10' "></xsl:variable>
<xsl:call-template name="sumstring">
<xsl:with-param name="string" select="$string"></xsl:with-param>
<xsl:with-param name="sum" select="0"></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="sumstring">
<xsl:param name="string"></xsl:param>
<xsl:param name="sum"></xsl:param>
<xsl:choose>
<xsl:when test="string-length($string)">
<xsl:variable name="firstnumber">
<xsl:choose>
<xsl:when test="contains($string,'+')">
<xsl:value-of select="number(substring-before($string,'+')) "></xsl:value-of>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="number($string)"></xsl:value-of>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="currentsum" select="$sum + $firstnumber"></xsl:variable>
<xsl:variable name="newstring">
<xsl:choose>
<xsl:when test="contains($string,'+')">
<xsl:value-of select="substring-after($string,'+')"></xsl:value-of>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="''"></xsl:value-of>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="sumstring">
<xsl:with-param name="string" select="$newstring"></xsl:with-param>
<xsl:with-param name="sum" select="$currentsum"></xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$sum"></xsl:value-of>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>


Cheers, John Bampton.

Posttop
noor  Subject: How to add a string with math operators ?
Author: noor
Date: 21 Apr 2009 07:14 AM
Thank you very much.

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.