我正在尝试创建自定义XSLT函数,但每次收到此错误时:
'非静态Java函数'compareCI'的第一个参数不是有效的对象引用。'
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:foo="http://whatever">
<xsl:function name="foo:compareCI">
<xsl:param name="string1"/>
<xsl:param name="string2"/>
<xsl:value-of select="compare(upper-case($string1),upper-case($string2))"/>
</xsl:function>
<xsl:template match="/">
<xsl:value-of select="foo:compareCI('red','blue')"/>
</xsl:template>
</xsl:stylesheet>
我希望你们中的某些人可以帮助我。提前做好准备。
答案 0 :(得分:6)
我认为您正在尝试使用Xalan运行此操作,Xalan是XSLT 1.0处理器,因此无法识别xsl:function。发生的事情是(a)Xalan忽略了xsl:function,因为给定一个指定version =“2.0”的样式表的XSLT 1.0处理器应该忽略它不理解的东西(在规范中称为“转发兼容模式”) );然后当它看到函数调用foo:compareCI()时,它认为这必须是对外部Java方法的调用。
您需要使用XSLT 2.0处理器(通常是Saxon)来运行它。