[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] last index of...

Subject: Re: [xsl] last index of...
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Mon, 12 Nov 2001 18:20:08 +0000

Hi Utah,

> Is there a function in XSLT which obtains the position of the last
> occurrence of a string within another string?

No, there isn't. To get the substring after the last occurrence of a
string, you need a recursive template, for example:

<xsl:template name="substring-after-last">
  <xsl:param name="string" />
  <xsl:param name="delimiter" />
    <xsl:when test="contains($string, $delimiter)">
      <xsl:call-template name="substring-after-last">
        <xsl:with-param name="string"
          select="substring-after($string, $delimiter)" />
        <xsl:with-param name="delimiter" select="$delimiter" />
    <xsl:otherwise><xsl:value-of select="$string" /></xsl:otherwise>

For example to get the extension of a file from its path you could

  <xsl:call-template name="substring-after-last">
    <xsl:with-param name="string" select="$file" />
    <xsl:with-param name="delimiter" select="'.'" />

Getting the last index would be slightly more complicated, and it
looks like you want to use it to get hold of the string after the last
occurrence of something, so hopefully this is sufficient.
[Note that the XQuery/XPath operators document contains an ends-with()
function so it's possible that in XPath 2.0 if you wanted to *test*
the value of the string after the last '.' to see if it was 'xml' then
you could do:

  ends-with($file, '.xml')

but that's just speculation at the moment.]

I hope that helps,


Jeni Tennison

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

Current Thread