Subject: RE: sum function
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sun, 29 May 2005 13:21:07 +0100
|
You may have noticed there is another thread running on the same subject -
how to sum over values that are computed from those held in the nodes,
rather than the actual string-values of the nodes. The solutions on offer
include:
(a) create a temporary tree containing nodes holding the values directly,
then sum over the nodes in that temporary tree
(b) a recursive named template
(c) the f:map function in FXSL
(d) the saxon:sum() extension function in Saxon 6.5.3
(e) In XSLT 2.0, sum(for $x in $nodes return number(tokenize($x, ' ')))
(f) In Schema-aware XSLT 2.0, if the type of your gml:Pos nodes is list of
numbers, then the sum() function will do the job directly.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Andreas Schnabl [mailto:Oandie@xxxxxxx]
> Sent: 29 May 2005 11:36
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: sum function
>
> Hi there,
>
> I am trying to sum some coordinates, afterwards I want to
> format them and
> display the issue. What I need is to summarize the first
> coordinates with
> the leading 3 and then the second with the leading 5.
> I tried the following but it didn't work out. It seems that
> the processor
> don't use the "substring-before"- elment, cause if I change it into
> "substring- after I got the same display...
> Here comes the code so far:
>
>
> <xsl:template name="x">
> <xsl:variable name="x_sum"
> select="sum(xplan:Position/gml:Polygon/gml:exterior/gml:Linear
> Ring/gml:Pos[substring-before(.,'
> ')])"/>
> <xsl:variable name="x_count"
> select="count(xplan:Position/gml:Polygon/gml:exterior/gml:Line
> arRing/gml:Pos)"/>
> <xsl:variable name="x_format" select="format-number($x_sum, '#')"/>"
> <xsl:variable name="x_rw" select="3400000"/>
> <xsl:variable name="x_ges" select="$x_rw*$x_count"/>
> <xsl:variable name="x_ges1" select="$x_format - $x_ges"/>
> <xsl:variable name="x_ges2" select="$x_ges1 div $x_count"/>
> <xsl:value-of select="$x_sum"/>
>
> </xsl:template>
>
>
> The source looks like this:
>
> Code:
>
> (...)
> <gml:Pos>3480252.383 5889479.27</gml:Pos>
> <gml:Pos>3480289.585 5889464.571</gml:Pos>
> (...)
>
>
> I changed the position of "substring" in the XPath expression
> like this:
>
>
>
> <xsl:variable name="x_sum"
> select="sum(substring-before(xplan:Position/gml:Polygon/gml:ex
> terior/gml:LinearRing/gml:Pos,'
> '))"/>
>
>
>
> But then I got only the first value.
> What I need is both of the values inside the gml:Pos element,
> but apart from
> each other. In the first step I would count all the values which a are
> before the blank and in the second the values after the blank
> and sum them
> up as well.
> I need to get the balance point of the values.
>
>
> I don't know if it depends maybe on the XSLT- processor I
> need. I am working
> with XMLSpy, 2005 professinal edition and I use the built in
> processor.
>
>
> cheers
>
> andy
>
>
> --
> --------------------------------------------
> GERMANY
> Andreas Schnabl
> Geibelstrasse 2a
> 76185 Karlsruhe
> Tel.:0721- 4903793
> Mob.: 0170-1590394
> --------------------------------------------
>
> 5 GB Mailbox, 50 FreeSMS http://www.gmx.net/de/go/promail
> +++ GMX - die erste Adresse f|r Mail, Message, More +++
|