Re: [xsl] problem with xsl:copy-of and counting lines

Subject: Re: [xsl] problem with xsl:copy-of and counting lines
From: Andreas Peter <info@xxxxxxxxxx>
Date: Wed, 20 Jun 2007 13:29:11 +0200
Quoting David Carlisle <davidc@xxxxxxxxx>:


<xsl:template match="block" mode="variable"> <xsl:copy-of select="."/> <xsl:variable name="countlines" select="string-length(/) - string-length(translate(/,'&#xA;',''))" /> <xsl:value-of select="."/> </xsl:template>


is the same code you used to count the whole document, just replace / (twice) by . if you want to just use the string value of the current element rather than the whole document. If you want to return a result tree fragment with that number as the string value of that number you then want to use $countlines not . in teh final value of, although of course as the variable is only used once you don't really need it. The first copy-of will copy the input into this result tree fragmnent which I assume you don't want, so

<xsl:template match="block" mode="variable">
<xsl:value-of elect="string-length(.) -
string-length(translate(.,'&#xA;',''))" />"/>
</xsl:template>

David

________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs.
________________________________________________________________________




Thanks to David and Michael! That works :-)


But if I want to use the value of the string for other operations I
have to declare a global variable, right? I want to declare the
variable in an external variables.xsl file. My idea was to create the
variables.xsl => xsl:apply-templates which points to the source
document => count the lines => use the resulting variable in my
stylesheet document. So far my idea :-)

Is it possible to match the node of an external document like
<xsl:template match="document('variables.xsl')/block"> or something like
this?

The variables.xsl file looks like this:

<xsl:template match="block">
<xsl:variable name="countlines">
<xsl:apply-templates/>
<xsl:value-of select="string-length(.) -
string-length(translate(.,'&#xA;', ''))"/>
</xsl:variable>
</xsl:template>

Thanks so much for your patience :-) I am just waiting for Michael
Kays two books about XPath 2.0 and XSLT 2.0 for helping me with the
theme.

Andreas

Current Thread