Re: URL decomposition

Subject: Re: URL decomposition
From: Jens Lautenbacher <jtl@xxxxxxxxxx>
Date: 25 May 2000 12:56:04 +0200
MarkH@xxxxxxxx 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


Current Thread