如何使用substring-after-last()

时间:2014-08-20 12:39:14

标签: xslt xpath

我想检索我正在处理的XML文档的名称,我正在使用下面的Xpath。

<xsl:value-of select="fn:base-uri()"/>

我得到的resule是文件的整个路径,如下面的

file:///C:/Users/home/Desktop/files/document/08192014/Raw.xml

所以为了获得XML文档的唯一名称,在Altova中,智能显示了一些函数substring-after-last(),我在下面使用它。

 <xsl:value-of select="substring-after-last(fn:base-uri(),'/')"/>

当我运行时,我收到了一些错误

Unknown function 'substring-after-last'
    Warning location: xsl:stylesheet / xsl:template / html / body / section / div 
    / xsl:value-of / @select
    Details
        XPST0017: The function call 'substring-after-last' does not match the 
        name of a function in the static context

请让我知道如何解决此问题并获取文件名,同样的错误也会引发substring-before-last()以及Altova中提供的其他一些功能。

我使用XSLT 2.0

在线搜索时我发现创建了一个模板,并且对该模板进行了调用,我想知道为什么我直接无法使用给定的函数 感谢

1 个答案:

答案 0 :(得分:5)

substring-after-last函数不是XPath标准的一部分,它是Altova特有的扩展函数。要使用它,您需要使用xmlns:altova="http://www.altova.com/xslt-extensions"声明Altova扩展名称空间,然后将该函数称为altova:substring-after-last

如果您希望坚持使用标准XPath函数以实现可移植性,那么您可以使用正则表达式重写它并使用replace函数代替

replace(base-uri(), '^.*/', '')

*量词是贪婪的,所以这将匹配从base-uri()开始以斜杠结尾的最长子串,并用空字符串替换它(即完全删除它)。