Re: [xsl] Determine file extension of path stored in variable

Subject: Re: [xsl] Determine file extension of path stored in variable
From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx>
Date: Mon, 27 Dec 2004 09:53:15 -0800 (PST)
You can also try a recursive approach..

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  
<xsl:output method="text" />

<xsl:variable name="lcpath"
select="'/images/dir.path/file.png'" />

<xsl:template match="/">
  <xsl:variable name="ext">
    <xsl:call-template name="get-file-extension">
      <xsl:with-param name="path" select="$lcpath" />
    </xsl:call-template>
  </xsl:variable>
  <xsl:value-of select="$ext" />
</xsl:template>

<xsl:template name="get-file-extension">
  <xsl:param name="path"/>
  
  <xsl:choose>
    <xsl:when test="contains($path, '/')">
      <xsl:call-template name="get-file-extension">
        <xsl:with-param name="path"
select="substring-after($path, '/')" />
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="substring-after($path,
'.')" />
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

</xsl:stylesheet>
Please note the use of ' in <xsl:variable
name="lcpath".. This way, contents of variable will be
treated as literal string. The way you have used it.. 
<xsl:variable name="lcpath"
select="/images/dir.path/file.png" /> , the variable
is bound to a XPath expression.. I hope, you mean
literal string..

You may test the above XSL as -
java net.sf.saxon.Transform file.xsl file.xsl

Regards,
Mukul

--- John <john-xsl-list@xxxxxxxx> wrote:

> What is the best way to determine the extension of a
> file when the 
> webroot-relative path is stored in a variable,
> assuming the path may 
> contain any number of "." characters (so I can't use
> substring-after)?  
> For instance if $lcpath contains
> /images/dir.path/file.png how do I set 
> $ext to be "png"?  Below is the best I have been
> able to come up with - 
> suggestions greatly appreciated.
> 
> <xsl:variable name="lcpath"
> select="/images/dir.path/file.png" />
> 
> <xsl:variable name="pos">
>   <xsl:choose>
>     <xsl:when test="substring( $lcpath,
> string-length( $lcpath ) - 5, 1 
> ) = '.'">4</xsl:when>
>     <xsl:when test="substring( $lcpath,
> string-length( $lcpath ) - 4, 1 
> ) = '.'">3</xsl:when>
>     <xsl:when test="substring( $lcpath,
> string-length( $lcpath ) - 3, 1 
> ) = '.'">2</xsl:when>
>     <xsl:when test="substring( $lcpath,
> string-length( $lcpath ) - 2, 1 
> ) = '.'">1</xsl:when>
>     <xsl:otherwise>0</xsl:otherwise>
>   </xsl:choose>
> </xsl:variable>
> <xsl:variable name="ext" select="substring( $lcpath,
> string-length( 
> $lcpath ) - $pos )" />




		
__________________________________ 
Do you Yahoo!? 
All your favorites on one personal page  Try My Yahoo!
http://my.yahoo.com 

Current Thread