XSLT import语句中的Saxon错误

时间:2011-08-29 21:38:54

标签: java xslt saxon

只要有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"/>

...

我的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语句,一切正常!它找不到要导入的文件,这很好,但这就是为什么我有解析器类来帮助它找到文件,但它永远不会触发解析器并且无法定位要导入的文件!

如何解决此问题?

1 个答案:

答案 0 :(得分:9)

您正在加载的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);