xsl-list
[Top] [All Lists]

RE: Count leading spaces using xpath expression

2002-12-04 02:46:11
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