我使用xslt 1.0来转换我的xml。
我有这个字符串:
hello 1s: This is very nice day. 9s: Christmas is about to come 14s: and christmas preparation is just on 25s: this is awesome!!
我想把它格式化成这样:
hello This is very nice day. Christmas is about to come and christmas preparation is just on this is awesome!!
为此,我尝试使用以下xslt:
<?xml version='1.0' encoding='UTF-8' ?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:regexp="http://exslt.org/regular-expressions"
extension-element-prefixes="regexp" >
<xsl:import href="regexp.xsl" />
<xsl:template match='/'>
<xsl:value-of select="regexp:replace(string(.), '[0-9]{1,4}s: ', 'g', '')" />
</xsl:template>
</xsl:stylesheet>
但是当我运行它时,我得到了以下错误:
java.lang.NoSuchMethodException: For extension function, could not find method java.lang.String.replace([ExpressionContext,] #STRING, #STRING, #STRING).
我做错了什么?
XSLT 1.0中没有对正则表达式的内置支持。您正在调用的EXSLT函数是扩展函数的第三方规范,可能在某些处理器中可用;您得到的错误消息表明它不适用于您的特定处理器(或者您需要以某种方式为该处理器安装/配置它)。
您正在使用Java,因此使用Saxon形式的XSLT 2.0应该没有任何障碍。
使用fn:replace(string,pattern,replace)本身如何?我不知道这在XSLT1.0中是否也可用;请检查。
字符串的示例。替换函数可以在这里找到
根据上面链接中的文档,replace采用regex模式。
replace函数的作用是:替换字符串中匹配正则表达式的部分。使用的正则表达式语法由XML Schema定义,并在XQueryXPath/XSLT中进行了一些修改/添加。$pattern参数是一个正则表达式。虽然拥有正则表达式的强大功能很好,但如果您只是想替换特定的字符序列,则不必熟悉正则表达式即可完成此操作;你可以为$pattern指定你想要替换的字符串,只要它不包含任何特殊字符。
因此可以使用fn:替换(文本(),[0 - 9]{1 4} : ', '')