Re: [xsl] sequence as function parameter

Subject: Re: [xsl] sequence as function parameter
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Mon, 4 Jul 2011 07:59:14 -0700
The correct type for the $serie parameter is xs:double*


Cheers,
Dimitre

On Mon, Jul 4, 2011 at 7:46 AM, Fabien Tillier <f.tillier@xxxxxxxx> wrote:
> 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">
> B  B  B  B <xsl:param name="serie"/>
> B  B  B  B <xsl:param name="result" as="xs:double"/>
> B  B  B  B <!--some test output -->
> B  B  B  B <xsl:value-of select="$serie"/>-<xsl:value-of
> select="$result"/>--
> B  B  B  B ###<xsl:value-of select="count($serie)"/>###
> B  B  B  B <!-- -->
> B  B  B  B <xsl:choose>
> B  B  B  B  B  B  B  B <xsl:when test="count($serie) gt 1">
> B  B  B  B  B  B  B  B  B  B  B  B <!-- make the multiplication between
result and
> the first item in the serie, then remove it and call again -->
> B  B  B  B  B  B  B  B  B  B  B  B <xsl:variable name="comp">
> B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B <xsl:value-of
select="number($serie[1])
> * $result"/>
> B  B  B  B  B  B  B  B  B  B  B  B </xsl:variable>
> B  B  B  B  B  B  B  B  B  B  B  B <xsl:call-template name=" multiplie">
> B  B  B  B  B  B  B  B  B  B  B  B <xsl:with-param
name="serie"><xsl:copy-of
> select="subsequence($serie,2)"/></xsl:with-param>
> B  B  B  B  B  B  B  B  B  B  B  B <xsl:with-param
name="result"><xsl:value-of
> select="$comp"/></xsl:with-param>
> B  B  B  B  B  B  B  B  B  B  B  B </xsl:call-template>
> B  B  B  B  B  B  B  B </xsl:when>
> B  B  B  B  B  B  B  B <xsl:otherwise>
> B  B  B  B  B  B  B  B  B  B  B  B <xsl:value-of select="number($serie[1])
*
> $result"/>
> B  B  B  B  B  B  B  B </xsl:otherwise>
> B  B  B  B </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
> B value has item type xs:double
>
> I am a bit out of ideas....
> Thank you in advance for any help.
>
> Best regards,
> Fabien
>
>



--
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.

Current Thread