我需要使用Apache FOP进行XSL转换,我有如下的代码:
//Setup FOP
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
//Setup Transformer
Source xsltSrc = new StreamSource(new File(xslPath));
Transformer transformer = tFactory.newTransformer(xsltSrc);
//Make sure the XSL transformation's result is piped through to FOP
Result res = new SAXResult(fop.getDefaultHandler());
//Setup input
Source src = new StreamSource(new File(xmlPath));
//Start the transformation and rendering process
transformer.transform(src, res);
其中xslPath
是我的XSLT文件存储的路径。
我确认当我只有一个XSLT文件时它是有效的,但在我的项目中,我将事物分为几个XSLT文件并使用<xsl:import />
标签将它们连接起来。在这种配置下,我会得到一个空指针异常,因为它无法理解存储在不同文件中的所有XSLT信息。
我想知道是否有任何方法可以将所有这些文件加载到Source xsltSrc
变量中,以便所有XSL信息都可用。
更新
根据Mads Hansen的答案,我已经更改了代码,但它仍然无法正常工作。我必须在类路径中包含XSLT slt文件,因此我使用ClassLoader加载XSLT文件。当执行url.toExternalForm()
时,我已检查URL是否具有正确的路径。这是我的新代码片段:
ClassLoader cl = this.getClass().getClassLoader();
String systemID = "resources/xslt/myfile.xslt";
InputStream in = cl.getResourceAsStream(systemID);
URL url = cl.getResource(systemID);
Source source = new StreamSource(in);
source.setSystemId(url.toExternalForm());
transformer = tFactory.newTransformer(source);
它找到并加载了myfile.xslt
,但仍然无法解析其他XSLT文件的相对路径。
我做错了什么?