XSLT 1.0中的正则是Java



我有一个简单的测试:

<xsl:if test="boolean(java:java.util.regex.Pattern.matches('a', 'a'))">
        <xsl:message terminate="no">success</xsl:message>
</xsl:if>

虽然引发了此错误:

ERROR:  'Cannot convert argument/return type in call to method 'java.util.regex.Pattern.matches(string, string)''
FATAL ERROR:  'Cannot convert argument/return type in call to method 'java.util.regex.Pattern.matches(string, string)''

我知道java实用程序可以工作,因为下面的代码恰当地编译:

<xsl:value-of select="java:format(java:java.text.SimpleDateFormat.new('dd/MM/yyyy, hh:mm a'), java:java.util.Date.new())"/>

我是错误地使用Pattern.matches()还是我缺少一个技巧?我似乎无法在XSLT内的Java上找到任何可靠的文档。

我在文档顶部声明了Java名称空间:

xmlns:java="http://xml.apache.org/xslt/java"

Pattern.matches的签名是

static boolean matches(String regex, CharSequence input)

请注意,第二个参数不是String,而是CharSequence,并且在String(XSLT)和CharSequence(Java)之间没有定义映射。因此,您必须通过创建实现所需界面CharSequence的类的对象来手动进行转换(例如java.lang.String)。

如果将XSLT测试表达式更改为

java:java.util.regex.Pattern.matches('a', java:java.lang.String.new('a'))

它有效。

这在Xalan-Java的文档中进行了描述,请参见https://xml.apache.org/xalan-j/extensions.html#ext-functions,以获取更多详细信息。

尽管如此,我发现它似乎并不总是像记录的那样起作用。手动创建类型java.lang.String的对象有时无法使用。然后,您必须尝试使用实现所需界面的其他类,在这种情况下,任何采用Java字符串并提供所需的Java字符序列接口,例如。java.lang.StringBufferjava.lang.StringBuilder

相关内容

  • 没有找到相关文章

最新更新