This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: sum and substring xpath needed
- From: Jeni Tennison <jeni at jenitennison dot com>
- To: "Andrew Welch" <awelch at piper-group dot com>
- Cc: xsl-list at lists dot mulberrytech dot com
- Date: Mon, 19 Aug 2002 16:26:22 +0100
- Subject: Re: [xsl] sum and substring xpath needed
- Organization: Jeni Tennison Consulting Ltd
- References: <63C4AD0365821F4291ACF76C0672FA3506EF1F@piper6.piper-group.int>
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hi Andrew,
> Please can someone give me the xpath that will sum() the following
> values into the select attribute of a variable (ie not a rtf).
>
> <colspec colwidth="38mm"/>
> <colspec colwidth="22mm"/>
> <colspec colwidth="26mm"/>
> <colspec colwidth="43mm"/>
>
> so something like:
>
> <xsl:variable name="total"
> select="sum(substring-before(//tgroup/colspec/@colwidth,'mm'))"/>
>
> ..this obviously fails because sum() requires a node-set and the
> substring functions return strings, but you get the idea. I dont
> think its possible to do in a single select but you never know,
> hopefully there's some trick available.
'Fraid not. You can create a RTF containing the values, convert that
to a node set and then sum the node set if you want. Otherwise you
have to use a recursive template of some kind. For example:
<xsl:template name="sum-column-widths">
<xsl:param name="columns" select="colspec" />
<xsl:param name="sum" select="0" />
<xsl:choose>
<xsl:when test="$columns">
<xsl:call-template name="sum-column-widths">
<xsl:with-param name="columns"
select="$columns[position() > 1]" />
<xsl:with-param name="sum"
select="$sum +
substring-before($columns[1]/@colwidth, 'mm')" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$sum" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
or one of Dimitre's FXSL templates.
---
XPath 2.0 way is still (most recent WDs):
sum( for $col in colspec
return substring-before(@colwidth, 'mm') )
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list