Subject: RE: [xsl] lastIndexOf('char') and XSLT string functions From: Troadec Pascal <Pascal.Troadec@xxxxxxxxxxxxxxx> Date: Thu, 15 Feb 2001 16:13:03 +0100 |
Hi Jeni, thank you for your solution. it is a great help for me. it is a good way to do what i want. thanks again pascal > -----Original Message----- > From: Jeni Tennison > Sent: Donnerstag, 15. Februar 2001 10:59 > To: Troadec Pascal > Cc: 'XSL-List@xxxxxxxxxxxxxxxxxxxxxx' > Subject: Re: [xsl] lastIndexOf('char') and XSLT string functions > > 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 XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] lastIndexOf('char') and X, Jeni Tennison | Thread | [xsl] [ANNOUNCE] XSLT-process 1.2 a, Ovidiu Predescu |
RE: [xsl] recursion troubles , Michael Kay | Date | Re: [xsl] French Book and Front Sof, Samuzeau Pascal |
Month |