2011-08-29 3 views
7

Saxon 프로세서는 XSLT import 문이있을 때마다 오류 메시지를 표시합니다. 여기XSLT import 문의 Saxon 오류

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

... 

내 자바 코드

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 등을 시도해 보았습니다 ... import 문을 제거하면 모든 것이 작동합니다 !! 가져올 파일을 찾을 수 없습니다. 그렇지만 파일을 찾는 데 도움이되는 해결 프로그램 클래스가 있는데도 불구하고 결코 해결 프로그램을 트리거하지 않으며 가져올 파일을 찾지 못합니다.

어떻게 해결할 수 있습니까?

+0

URIResolver가 호출되지 않는다는 것을 어떻게 알 수 있습니까? URIResolver 구현을위한 코드를 보여라. –

답변

7

로드하려는 XSLT의 StreamSource에 대해 set the System ID이 필요할 수 있습니다.

StreamSource에서로드 할 때 XSLT가 "있는 위치"를 알 수 없으며 상대 경로를 해결하는 방법을 결정하는 데 어려움이 있습니다.

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

정답. xsl : import는 아마도 URIResolver가 있지만 기본 URI가 없지만 어려울 때만 작동하도록 만들 수 있습니다. 동일한 절대 URI에 대해 두 가지 가져 오기가있는 경우 동일한 모듈을 다시 가져 오는 규칙이 있기 때문입니다. –

+0

@Mads Hansen, 고맙습니다. 그게 효과가 있었어. 그러나 여전히 URIResolver는 트리거되지 않았다. – Ayyoudy

+0

하지만 xslt 파일이 jar 파일의 리소스 아래에 있으면 어떻게해야합니까? 나는 그것을 제대로 실행시키지 못하고있다 ... – YaP