2011-08-29 11 views
7

El procesador de Saxon me da un error cada vez que tengo una instrucción de importación XSLT. Aquí está el error:Error de Saxon con instrucción de importación XSLT

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

Aquí es cómo mi documento XSLT se parece a:

<?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"/> 

... 

Mi código 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 clase de resolución de URI no se dispara! Funciona con el método newTransformer() anterior ... Intenté con XsltCompiler, etc. y lo mismo ... ¡Si eliminé la declaración de importación, todo funciona! No puede encontrar el archivo para importar que está bien, pero es por eso que tengo la clase de resolución para ayudarlo a localizar el archivo, pero nunca desencadena la resolución y falla al ubicar el archivo para importar.

¿Cómo puedo resolver esto?

+0

¿Cómo sabes que no se está llamando a tu URIResolver? Muestra el código para tu implementación de URIResolver. –

Respuesta

7

Es probable que necesite set the System ID para StreamSource del XSLT que está cargando.

Cuando carga de un StreamSource, no sabe dónde vive su XSLT y tiene dificultad para determinar cómo resolver las rutas relativas.

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

Respuesta correcta. xsl: la importación probablemente se podría hacer funcionar cuando no hay un URI base siempre que haya un URIResolver, pero solo con dificultad, debido a la regla que dice que si tienes dos importaciones para el mismo URI absoluto, obtienes el mismo módulo. –

+0

@Mads Hansen, gracias. Eso funciono. Sin embargo, aún es extraño que el URIResolver no se haya activado. – Ayyoudy

+0

, pero ¿qué hacer si el archivo xslt está dentro de los recursos en un archivo jar? No lo estoy ejecutando correctamente ... – YaP

Cuestiones relacionadas