2013-04-23 11 views
5

Sto cercando di creare una funzione XSLT personalizzato, ma ogni volta che riceve questo errore:Crea una funzione XSLT personalizzato

'Il primo argomento della funzione Java non statica 'compareCI' non è un riferimento oggetto valido. '

<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> 

Spero che qualcuno di voi mi possa aiutare .Grazie molto in anticipo.

+1

Sta funzionando bene alla mia estremità in Ossigeno. Fornisce il risultato "1" quando si confrontano "rosso" con "blu" e "0" quando si confronta "rosso" con "rosso" –

+1

Come si esegue XSLT e con quale processore? (Ho usato Saxon-HE 9.4.0.6 e funziona) – FiveO

+0

Non so quale versione abbia usato Java. Il mio codice Java è TransformerFactory factory = TransformerFactory.newInstance(); Origine xslt = new StreamSource (nuovo file ("/ home/xxx/xxx/aliformater-1.xslt")); Transformer transformer = factory.newTransformer (xslt); – javagc

risposta

6

Penso che si stia tentando di eseguire questo utilizzando Xalan, che è un processore XSLT 1.0 e quindi non riconosce la funzione xsl :. Quello che sta succedendo è che (a) Xalan ignora la funzione xsl: poiché un processore XSLT 1.0 che ha un foglio di stile che specifica la versione = "2.0" dovrebbe ignorare cose che non capisce (chiamate "modalità di compatibilità avanti" nelle specifiche)); e poi quando vede la funzione call to foo: compareCI() pensa che questa deve essere una chiamata a un metodo Java esterno.

È necessario eseguire questo con un processore XSLT 2.0, in genere Saxon.

+0

Buon lavoro. Grazie mille – javagc

+0

Grazie. Ci stavamo lottando – Jack

Problemi correlati