xsl-list
[Top] [All Lists]

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

2007-06-20 04:29:31
Quoting David Carlisle <davidc(_at_)nag(_dot_)co(_dot_)uk>:


<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.
________________________________________________________________________

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




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


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--