ASP Error: 70
Description: Permission denied
Source: Microsoft VBScript runtime error
|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: String-length
Alternatively, use a named template to collect (nodes containing) the
numbers you want to add up in a variable, and apply the sum() function
to them. The tricky bit is that the variable contains a result-tree
fragment, not a node list, and the sum() function must be given a
node-list, so you need to convert the result-tree fragment to a
node-list using a node-set() extension function. This is available in
Saxon or XT (and it looks such a good idea that surely all good XSL
processors will have it eventually).
This kind of use of apply-templates or call-template inside a variable
is often an alternative to recursive named templates.
So in Saxon that would be:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sxf="/com.icl.saxon.functions.Extensions" version="1.0">
<xsl:template match="para">
<xsl:variable name="lengths">
<xsl:apply-templates select="preceding-sibling::para|."
mode="length"/>
</xsl:variable>
This para contains: <xsl:value-of select="string-length()"/>
Total from para number 1 to <xsl:value-of select="position()"/>:
<xsl:value-of select="sum(sxf:node-set($lengths)/length)"/>
</xsl:template>
<xsl:template match="para" mode="length">
<length><xsl:value-of select="string-length()"/></length>
</xsl:template>
and in XT you need to declare the xmlns:xt="http://www.jclark.com/xt"
namespace and change sxf:node-set to xt:node-set.
Kay Michael wrote:
>
> You need another of those recursive named templates that does, in effect
> strlength($nodeset) = string-length($nodeset[1]) +
> strlength($nodeset[position()>1])
>
> Of course writing this in XSL is about 15 lines of code. There are many
> examples of this pattern in the archives of this list.
>
> Mike Kay
>
> > -----Original Message-----
> > From: Thomas Karlsen [mailto:ThomasK@xxxxxxxxxxxxxxx]
> > Sent: 13 December 1999 11:22
> > To: 'XSL-List@xxxxxxxxxxxxxxxx'
> > Subject: String-length
> >
> >
> > Im trying to hold track over how many char. i'm sending to the output.
> >
> > xml:
> > <section>
> > <para>this is a test</para>
> > <para>this is a test</para>
> > <para>this is a test</para>
> > <para>this is a test</para>
> > </section>
> >
> > xsl:
> > <template match="section">
> > <apply-templates />
> > </template>
> >
> > <template match="para">
> > This para contains: <xsl:value-of select="string-length()"/>
> > Total from para number 1 to <xsl:value-of select="position()"/>:
> > <xsl:value-of select="string-length(preceding-sibling::para)"/>
> > <apply-templates />
> > </template>
> >
> > My question is how can I add the string-values for the para's that is
> > already traversed?
> > The preceding-sibling function only gives me the value of the
> > first para in
> > the node-set.
--
cheers
phil
"that monotonous state of the soul halfway between fulfillment
and futility which comes with life in the country" --- Musil
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








