This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Variables and constants
- To: xsl-list at mulberrytech dot com
- Subject: Re: Variables and constants
- From: David Carlisle <davidc at nag dot co dot uk>
- Date: Fri, 25 Feb 2000 14:59:24 GMT
- References: <4237BC86CEB8D31195FF0050040FEA9509AB@CLEMENS>
- Reply-To: xsl-list at mulberrytech dot com
PS
> Clearly this was an intentional design decision, but it makes it impossible
> to do any kind of simplistic calculation (e.g. totalling a shopping cart
> that has price and quantity information for each item) without resorting to
> recursion.
The fact that some calculations are rather awkward in xslt is not really
due so much to the functional style, as to the fact that the main
`function' expression that you have available, namely the template
returns a result of a type `result tree fragment' that is opaque to the
expression language.
If the restrictions on querying into rtf were not there or
(equivalently) a function is provided to coerce an rtf back to a node
set so that it may be queried, then many things become much simpler.
So here is your basket calculation sans recursion but with xt:node-set
<x>
<thing><quantity> 1</quantity><price> 2</price></thing>
<thing><quantity> 4</quantity><price> 5</price></thing>
<thing><quantity> 3</quantity><price>10</price></thing>
<thing><quantity> 2</quantity><price> 1</price></thing>
</x>
<total xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xsl:version="1.0"
xmlns:xt="http://www.jclark.com/xt"
>
<xsl:variable name="x">
<xsl:for-each select="x/thing">
<a><xsl:value-of select="quantity * price"/></a>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="sum(xt:node-set($x)/a)"/>
</total>
xt basket.xml basket.xsl
<?xml version="1.0" encoding="utf-8"?>
<total>54</total>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list