如何使用substring-after-last()

use*_*094 0 xslt xpath

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

<xsl:value-of select="fn:base-uri()"/>
Run Code Online (Sandbox Code Playgroud)

我得到的resule有文档的整个路径,如下所示

file:///C:/Users/home/Desktop/files/document/08192014/Raw.xml
Run Code Online (Sandbox Code Playgroud)

因此,为了获得XML文档的唯一名称,在Altova中,智能显示了一些功能substring-after-last(),我在下面使用它.

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

当我运行这个时,我得到了一些错误

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
Run Code Online (Sandbox Code Playgroud)

请让我知道如何解决这个问题并获取文件名,同样的错误也被抛出,substring-before-last()以及Altova中给出的一些其他功能.

我使用XSLT 2.0

在线搜索我发现有一个模板创建并调用该模板,我想知道为什么我直接无法使用给定的功能谢谢

Ian*_*rts 5

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

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

replace(base-uri(), '^.*/', '')
Run Code Online (Sandbox Code Playgroud)

*量词是贪心,所以这将从开始相匹配的最长可能字串的base-uri()以斜线结束,并且用一个空字符串替换它(即完全删除).