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
<xsl:template match="block" mode="variable"> <xsl:copy-of select="."/> <xsl:variable name="countlines" select="string-length(/) - string-length(translate(/,'
',''))" /> <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(.,'
',''))" />"/> </xsl:template>
________________________________________________________________________ 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. ________________________________________________________________________
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?
<xsl:template match="block"> <xsl:variable name="countlines"> <xsl:apply-templates/> <xsl:value-of select="string-length(.) - string-length(translate(.,'
', ''))"/> </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.