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

Subject: Re: String-length
From: Phil Lanch <phil@xxxxxxxxxxxxxxx>
Date: Mon, 13 Dec 1999 19:09:17 +0000
phil para
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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.