Саксонская ошибка с оператором импорта XSLT - PullRequest
8 голосов
/ 30 августа 2011

Саксонский процессор выдает мне ошибку всякий раз, когда у меня есть оператор импорта XSLT.Вот ошибка:

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

Вот как выглядит мой XSLT-документ:

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

...

Мой код 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!

Класс распознавателя URI никогда не бываетсрабатывает!Он останавливается на методе newTransformer (), описанном выше ... Я попробовал XsltCompiler и т. Д., И то же самое ... Если я удаляю оператор импорта, все работает !!Он не может найти файл для импорта, и это хорошо, но именно поэтому у меня есть класс преобразователя, который помогает ему найти файл, но он никогда не вызывает распознаватель и не может найти файл для импорта!

Как разрешитьэто?

1 Ответ

10 голосов
/ 30 августа 2011

Возможно, вам нужно установить системный идентификатор для StreamSource загружаемого XSLT.

Когда вы загружаете из StreamSource, он не знает, где «живет» ваш XSLT, и ему трудно определить, как разрешить относительные пути.

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