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(_at_)jpw3(_dot_)com> 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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--