2008-08-18 125 views
8

我需要能夠查找元素中最後一次出現的字符。反向在字符串中查找

例如:

<mediaurl>http://www.blah.com/path/to/file/media.jpg</mediaurl> 

如果我試圖通過使用substring-before(mediaurl, '.')substring-after(mediaurl, '.')然後找到它,它當然會,比賽的第一個點。

如何獲取文件擴展名?從本質上講,我需要從這樣的路徑獲取文件名和擴展名,但是我非常難以理解如何使用XSLT進行操作。

回答

14

以下是將產生在XSLT 1.0所需要的輸出的模板的一個例子:

<xsl:template name="getExtension"> 
<xsl:param name="filename"/> 

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

<xsl:template match="/"> 
    <xsl:call-template name="getExtension"> 
     <xsl:with-param name="filename" select="'http://www.blah.com/path/to/file/media.jpg'"/> 
    </xsl:call-template> 
</xsl:template> 
+0

您的回答對於獲取擴展名是否正確。獲取可以測試的文件名和擴展名以及「substring-after」「/」。這將導致獲取文件名。有了這個,你可以很容易地得到擴展:substring-after(filenameWithExtension,'。')。 – Patric 2012-02-16 14:29:21

0

如何用「/」標記化並從數組中取出最後一個元素?

Example: tokenize("XPath is fun", "\s+") 
Result: ("XPath", "is", "fun") 

有時XSLT提琴手......現在失去了聯繫。但HTH

4

如果您使用XSLT 2.0,它很容易:

<xsl:variable name="extension" select="tokenize($filename, '\.')[last()]"/> 

如果你沒有,這是一個有點困難。 O'Reilly XSLT Cookbook有一個很好的例子。搜索「Tokenizing一個字符串」。

我相信還有一個EXSLT函數,如果你有可用的。

0

作爲參考,該問題通常被稱爲「子串後最後的」 XSLT中。

+0

不是xslt中的函數1.0 – 2013-01-18 09:52:00