This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: URL decomposition
MarkH@i2.co.uk writes:
> At last, a question for the list which seems to go beyond newbiness!
>
> Can you think of a way to decompose a URL?
>
> I want to take something like: http://www.agilic.com/purchase.htm and end up
> with purchase.htm. I've managed to use some of the string manipulation
> capabilities of XPath to do things like change the file suffix from ".htm"
> to ".xsl", but with only "substring-after()" and nothing I can find to loop
> over the slash characters I'm not sure how to do this in XSLT.
>
> For example, if there were something like <xsl:while> I could do something
> like:
>
> <xsl:while test="contains($xslfile,'/')">
> <xsl:variable name="xslfile"><xsl:value-of
> select="substring-after('/',$xslfile)"/></xsl:variable>
> </xsl:while>
You have recursion.... :-)
This template get's a filename and gives back the directory part of
it. Giving back the filename part is achieved along the same line
You call it somehow like
<xsl:call-template name="strip">
<xsl:with-param name="relfile">foo/bar/baz.xml</xsl:with-param>
</xsl:call-template>
<xsl:template name="strip">
<xsl:param name="reldir"/>
<xsl:param name="relfile"/>
<xsl:choose>
<xsl:when test="contains($relfile, '/')">
<xsl:call-template name="strip">
<xsl:with-param name="relfile">
<xsl:value-of select="substring-after($relfile,'/')"/>
</xsl:with-param>
<xsl:with-param name="reldir">
<xsl:value-of select="concat($reldir, substring-before($relfile,'/'), '/')"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$reldir"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list