| Subject: Re: [xsl] lastIndexOf('char') and XSLT string functions From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx> Date: Thu, 15 Feb 2001 09:59:12 +0000 | 
Hi Troadec,
> i'm looking for a xslt method to identify the last iteration of a
> char into a string. For example, to extract automatically the name
> of the html page into the url.
>
> string : "h ttp://www.thesite.com/directory1/dir2/dir3../pageindex.htm"
>
> there are the functions substrings-before() et substring-after(),
> but they work on the first occurence of the marker-string. Is there
> a Xslt function which gives the last occurence of a marker-string
> (like lastIndexOf('/',"string")) into a string?
No, there isn't.
You can achieve what you want through recursion.  Walk through the
string, taking bits off the front of it until you get to a string
which has no '/' in it whatsoever.
<!-- define a lastIndexOf named template -->
<xsl:template name="lastIndexOf">
   <!-- declare that it takes two parameters - the string and the char -->
   <xsl:param name="string" />
   <xsl:param name="char" />
   <xsl:choose>
      <!-- if the string contains the character... -->
      <xsl:when test="contains($string, $char)">
         <!-- call the template recursively... -->
         <xsl:call-template name="lastIndexOf">
            <!-- with the string being the string after the character
                 -->
            <xsl:with-param name="string"
                            select="substring-after($string, $char)" />
            <!-- and the character being the same as before -->
            <xsl:with-param name="char" select="$char" />
         </xsl:call-template>
      </xsl:when>
      <!-- otherwise, return the value of the string -->
      <xsl:otherwise><xsl:value-of select="$string" /></xsl:otherwise>
   </xsl:choose>
</xsl:template>
To get the filename of a URL held in the URL child of the current
node, you can call this template like:
  <xsl:call-template name="lastIndexOf">
     <xsl:with-param name="string" select="URL" />
     <xsl:with-param name="char" select="/" />
  </xsl:call-template>
It's pretty verbose, but I'm afraid that's the only way to do it in
XSLT at the moment.
I hope that helps,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| [xsl] lastIndexOf('char') and XSLT , Troadec Pascal | Thread | RE: [xsl] lastIndexOf('char') and X, Troadec Pascal | 
| RE: [xsl] Stopping Saxon searching , Michael Kay | Date | Re: [xsl] "expected markup declarat, Jeni Tennison | 
| Month |