创建自定义XSLT函数

时间:2013-04-23 08:10:23

标签: function xslt xslt-2.0

我正在尝试创建自定义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> 

我希望你们中的某些人可以帮助我。提前做好准备。

1 个答案:

答案 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)来运行它。