在XSLT中最后一次出现字符后获取子字符串

我在XML文件中有一个字符串,看起来类似于:

M:Namespace.Class.Method(Something a,something b)

句点(。)字符的数量是有用的,这意味着它在本例中只能是2,但可以更多。

我想使用XSLT从最后一个’。’获取该字符串的子字符串。 性格,所以我只剩下:

方法(某事,某事b)

我无法使用标准的substring / substring-after函数实现此目的。

是否有捷径可寻?

在XSLT 1.0中,您将需要使用递归模板 ,如下所示:

             

并像这样调用它:

     

在XSLT 2.0中,您可以使用tokenize()函数 ,只需选择序列中的最后一项:

 tokenize('M:Namespace.Class.Method(Something a, Something b)','\.')[last()] 

对于接受的答案,这是一个更有效的解决方案O(N)与O(N ^ 2)

                        

将此转换应用于以下XML文档时

 M:Namespace.Class.Method(Something a, Something b) 

产生了想要的正确结果

 Method(Something a, Something b) 

说明

此解决方案不包含对substring-after()函数的任何调用 。 相反,在每一步中,只比较字符串的一个字符与点字符的相等性。 因为最多有N个字符,所以这是O(N) – 线性复杂度。

相反,接受的答案在每一步调用substring-after()函数 。 在最坏的情况下,可能存在N个点,因此这将是O(N ^ N) – 二次复杂度。

注意 :我们做出合理的假设,在两个解决方案中,定位字符串的第k个字符是O(1)。

如果您确实知道字符串中只有两个点,那么您可以尝试: