XSLT 1.0上的Regexp错误



我使用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} : ', '')

相关内容

  • 没有找到相关文章

最新更新