First translate the first non-space to "x":
translate($str, translate($str, ' ', ''), 'x')
then it's easy:
string-length(substring-before(
translate($str, translate($str, ' ', ''), 'x'),
'x'))
If you need to handle strings containing all spaces, you may need to
concat() an 'x' at the end before you start.
Not tested.
Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
Grainne Reilly
Sent: 04 December 2002 03:58
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Count leading spaces using xpath expression
Hi,
I am looking for a way to count the number of leading spaces
in the text of
an element. I have written the following template which does this:
<xsl:template name="countIndent">
<xsl:param name="str" />
<xsl:param name="leadingSpaces" select="0"/>
<xsl:choose>
<xsl:when test="(string-length($str) != 0) and
(normalize-space(substring($str, 1, 1)) = '' )" >
<xsl:call-template
name="countIndent">
<xsl:with-param
name="str" select="substring($str, 2)" />
<xsl:with-param
name="leadingSpaces" select="$leadingSpaces + 1"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$leadingSpaces" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
However, I'd like to get this information as an xpath
expression (so I can
use it in a predicate e.g. /myElement[(indent expression) >
3]). Is this
possible (it would only have to work for spaces, not all
whitespace)? Thanks for any advice. Grainne.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list