2011-08-29 9 views
7

XSLTインポートステートメントがあると、Saxonプロセッサでエラーが表示されます。ここでエラーがある:ここではXSLTインポートステートメントで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"/> 

... 

私の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などを試してみたが、同じことをやってみた... 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に対して2つのインポートがある場合、同じモジュールを元に戻すというルールのため、URIResolverが提供されているにもかかわらず、難しかったベースURIがないときに機能するようにできます。 –

+0

@Mads Hansen、ありがとう。それはうまくいった。しかし、URIResolverはまだ起動されていませんでした。 – Ayyoudy

+0

しかし、xsltファイルがjarファイル内のリソースの下にある場合はどうすればよいですか?私はそれが正しく実行されていない... – YaP

関連する問題