[xsl] sequence as function parameter

Subject: [xsl] sequence as function parameter
From: "Fabien Tillier" <f.tillier@xxxxxxxx>
Date: Mon, 4 Jul 2011 16:46:00 +0200
Hi List.
I am trying to create a simple function to multiply each item in a
sequence by each other (like a sum()).
My problem is that I am unable to have the parameter treated as a node
sequence (using saxon, so XSL2.0)

I have
<xsl:template name=" multiplie">
	<xsl:param name="serie"/>
	<xsl:param name="result" as="xs:double"/>
	<!--some test output -->
	<xsl:value-of select="$serie"/>-<xsl:value-of
select="$result"/>--
	###<xsl:value-of select="count($serie)"/>###
	<!-- -->
	<xsl:choose>
		<xsl:when test="count($serie) gt 1">
			<!-- make the multiplication between result and
the first item in the serie, then remove it and call again -->
			<xsl:variable name="comp">
				<xsl:value-of select="number($serie[1])
* $result"/>
			</xsl:variable>
			<xsl:call-template name=" multiplie">
			<xsl:with-param name="serie"><xsl:copy-of
select="subsequence($serie,2)"/></xsl:with-param>
			<xsl:with-param name="result"><xsl:value-of
select="$comp"/></xsl:with-param>
			</xsl:call-template>
		</xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="number($serie[1]) *
$result"/>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>

That I can call (for testing) with
<xsl:variable name="seq" select="(6.8E-06,5.5E-06,7.1E-06,7.3E-06)"/>
<xsl:value-of select=" multiplie($seq)"/>

And the output I get
#############################################
6.8E-06 5.5E-06 7.1E-06 7.3E-06
#############################################
0.0000068 0.0000055 0.0000071 0.0000073-1--
####
NaN

#############################################

So, the part where I do a count gets me 1, when I should have 4...
I have tried with
<xsl:param name="serie" as="node()*"/> but I have an error message
XTTE0790: Required item type of first argument of multiplie() is node();
supplied
  value has item type xs:double

I am a bit out of ideas....
Thank you in advance for any help.

Best regards,
Fabien

Current Thread