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 を使用してこれを実行しようとしていると思いますが、Xalan は XSLT 1.0 プロセッサであるため、xsl:function を認識しません。何が起こっているかというと、(a) Xalan は xsl:function を無視します。これは、version="2.0" を指定するスタイルシートが与えられた XSLT 1.0 プロセッサは、理解できないもの (仕様では「前方互換モード」と呼ばれる) を無視することになっているためです。 ); そして、foo:compareCI() への関数呼び出しを確認すると、これは外部 Java メソッドへの呼び出しであるに違いないと考えます。

これは XSLT 2.0 プロセッサ (通常は Saxon) で実行する必要があります。

于 2013-04-23T09:57:32.280 に答える