如何使用XSLT v1.0插入文本而不是使用XSLT v2.0正则表达式?

我有一个xml文件,它描述(除其他外)具有描述完全限定的java类名的属性值的元素。 我正在尝试编写一个XSLT转换来修改此文件中描述的类名,这样(例如) com.example.MyClass ocurrances将变为com.example.MockMyClass

以下是原始文件片段上下文中的示例:

    templates/MyTemplate.vm    

我希望结果如下:

    templates/MyTemplate.vm    

我正在使用Java JAXP API进行这种转换,并编写了一个可爱的符合XSLT 2.0的regex例程来获得我想要的结果,但却发现Java 5不支持正则表达式支持所需的XSLT 2.0。

所以我的问题是,使用古老的JAXP XSLT 1.0 API实现这一目标的最佳方法是什么? 也就是说,不使用正则表达式。 我寻找类似的问题,但反向引用正则表达式组的要求似乎使这个问题变得棘手。 这个问题是一个开始,但我需要在匹配的字符串中插入文本,而不是仅仅替换

作为参考,这是我的正则表达式(XSLT 2.0)尝试:

      Mock         

以下怎么样?

               

这将类名作为输入参数,并在最后的“。”之后添加“Mock”。 你可以用它来调用它,例如

     

(我刚刚在Firefox中试了一下,你可能会发现需要整理一些空白区域。)

以下似乎很长,但它使用现成部分( strRev模板由FXSL提供,无需重写)。 此外,近一半的代码是身份模板,并将params传递给 。 这在XSLT 2.0中大大缩短。

当我们准备好较小的部件/函数(如strRev template / reverse()函数)时,此解决方案不需要编写冗长且容易出错的自制递归代码。

基本的想法是最后的'.' 字符串中的字符是第一个'.' 反转字符串中的字符

                                      

当此转换应用于提供的XML文档时

    templates/MyTemplate.vm    

产生了想要的正确结果

    templates/MyTemplate.vm    

II。 XSLT 2.0解决方案

完全相同的算法,但在XSLT 2.0中真的很短