2013-04-23 10 views
5

を作成し、私はカスタムXSLT関数を作成しようとしていますが、すべての時間が、私はこのエラーが表示されます。カスタム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

私の酸素終末点では正常に動作しています。 'red'と 'blue'を比較すると '1'、 'red'と'n'red 'を比較すると' 0 'が返されます –

+1

XSLTをどのように実行しますか? (私はSaxon-HE 9.4.0.6を使用していましたが動作します) – FiveO

+0

Javaを使用しているバージョンはわかりません。私のJavaコードは です。TransformerFactory factory = TransformerFactory.newInstance(); ソースxslt =新しいStreamSource(新しいファイル( "/ home/xxx/xxx/aliformater-1.xslt")); トランストランス= factory.newTransformer(xslt); – javagc

答えて

6

私はあなたがXSLT 1.0プロセッサであるXalanを使ってこれを実行しようとしていると思うので、xsl:functionを認識しません。バージョン(version)= "2.0"を指定したスタイルシートが与えられているXSLT 1.0プロセッサは、それが理解できないものを無視することになっているので、(a)Xalanはxsl:関数を無視します);それがfoo:compareCI()への関数呼び出しを見ると、これは外部Javaメソッドへの呼び出しでなければならないと考えます。

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

+0

良い仕事です。ありがとうございます。 – javagc

+0

ありがとうございました。我々はそれに苦労していた – Jack