xsl-list
[Top] [All Lists]

RE: xsl:function, arithmetic

2005-02-14 11:09:22
I'm having a few problems with an xsl:function.

Its supposed to take a numerical parameter and return it multiplied by
1.2 and rounded:

<xsl:function name="my:increase">
    <xsl:param name="i" />
    <xsl:value-of select="round(1.2 * $i)" />
</xsl:function>

Firstly, if you're expecting a numerical parameter it's best to say so:

  <xsl:param name="i" as="xs:double"/>

and if you want to return a numerical result it's best to say so:

  <xsl:function name="my:increase" as="xs:double">

This might be enough to fix the problem (because it will force certain type
conversions), and if it doesn't, it will give you error messages that point
you closer to the answer.

Secondly, xsl:value-of creates a text node. You don't want a text node here,
you want a number. So use xsl:sequence:

<xsl:function name="my:increase" as="xs:double">
     <xsl:param name="i" as="xs:double"/>
     <xsl:sequence select="round(1.2 * $i)" />
</xsl:function> 

In most contexts, if you expect a number and provide an untyped text node,
the number will be extracted from the text node. But it's better to return
the number in the first place.

Michael Kay
http://www.saxonica.com/


I've tried added an xsl:message to the function to check the XPath
expression and it seems to be correct, but all the expressions in my
stylesheet which use this function seem to return 
non-numerical results.
I've also tried just returning the parameter unaltered, in 
which case I
get no problems. And I've tried things like 'select="$i + $i 
div 5"' but
still get the problem.

I'm using XSLT2, Saxon 8.2B.

Any ideas?

Richard

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>