6

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

我希望你们中的某个人可以帮助我。非常感谢提前。

4

1 回答 1

7

我认为您正在尝试使用 Xalan 来运行它,它是一个 XSLT 1.0 处理器,因此无法识别 xsl:function。发生的情况是 (a) Xalan 忽略了 xsl:function,因为 XSLT 1.0 处理器被指定了一个指定 version="2.0" 的样式表应该忽略它不理解的东西(在规范中称为“向前兼容模式” ); 然后当它看到对 foo:compareCI() 的函数调用时,它认为这一定是对外部 Java 方法的调用。

您需要使用 XSLT 2.0 处理器(通常是 Saxon)来运行它。

于 2013-04-23T09:57:32.280 回答