2011-08-29 10 views
7

Il processore Saxon mi dà un errore ogni volta che ho un'istruzione import XSLT. Ecco l'errore:Errore Saxon con istruzione import XSLT

XTSE0165: I/O error reported by XML parser processing file: shared/test.xslt (The system cannot find the path specified): 

Ecco come mio documento XSLT assomiglia:

<?xml version='1.0' encoding='UTF-8'?> 

<xsl:stylesheet version='2.0' 
    xmlns:xsl='http://www.w3.org/1999/XSL/Transform' 
    xmlns:fn='http://www.w3.org/2005/02/xpath-functions' 
    xmlns:xs='http://www.w3.org/2001/XMLSchema' 
    > 

    <xsl:import href="shared/test.xslt"/> 

... 

Il mio codice Java

TransformerFactory transformerFactory = TransformerFactoryImpl.newInstance(); 

transformerFactory.setURIResolver(uriResolver); //my own custom URI resolver 

Transformer transformer = transformerFactory.newTransformer(new StreamSource(xsltInputStream)); //this is where the error occurs when I debug! 

La classe resolver URI è mai attivato! Si blocca sul nuovo metodo Transformer() sopra .... Ho provato XsltCompiler, ecc. E la stessa cosa ... Se rimuovo l'istruzione import, tutto funziona !! Non riesce a trovare il file da importare, ma è per questo che ho la classe resolver per aiutarlo a localizzare il file, ma non fa mai scattare il resolver e fallisce nel localizzare il file da importare!

Come si risolve?

+0

Come fai a sapere che il tuo URIResolver non viene chiamato? Mostra il codice per la tua implementazione URIResolver. –

risposta

7

Probabilmente è necessario set the System ID per StreamSource dell'XSLT che si sta caricando.

Quando carichi da un StreamSource, non sa dove il tuo XSLT "vive" e ha difficoltà a determinare come risolvere i percorsi relativi.

StreamSource source = new StreamSource(xsltInputStream); 
source.setSystemId(PATH_TO_THE_XSLT_FILE_ON_THE_FILESYSTEM_OR_URL); 
Transformer transformer = transformerFactory.newTransformer(source); 
+0

Risposta corretta. xsl: probabilmente l'importazione potrebbe funzionare perché non esiste un URI di base a condizione che esista un URIResolver, ma solo con difficoltà, a causa della regola che dice se si hanno due importazioni per lo stesso URI assoluto, si ottiene di nuovo lo stesso modulo. –

+0

@ Mads Hansen, grazie. Ha funzionato. Ancora strano, tuttavia, che l'URIResolver non è stato nemmeno attivato. – Ayyoudy

+0

ma cosa fare se il file xslt è sotto le risorse in un file jar? Non riesco a farlo funzionare correttamente ... – YaP