Subject: RE: [xsl] 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: [xsl] 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 +++
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] sum function, Andreas Schnabl | Thread | [xsl] Q - Parsing & Manipulating St, Ahsan Ali |
[xsl] sum function, Andreas Schnabl | Date | RE: [xsl] How do I get a SUM of the, Michael Kay |
Month |