加载 XSLT 文件时解析相对路径
我需要使用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);
where 是存储 XSLT 文件的路径。xslPath
我已经确认当我只有一个XSLT文件时它可以工作,但是在我的项目中,我已经将内容分成几个XSLT文件,并用标记连接它们。使用此配置,我得到一个 NullPointerException,因为它不理解存储在 XSLT 中的所有信息,因为它分布在不同的文件上。<xsl:import />
我想知道是否有任何方法可以在变量中加载所有这些文件,以便所有XSL信息都可用。Source xsltSrc
更新
我已经根据Mads Hansen给出的答案更改了代码,但它仍然不起作用。我必须在类路径中包含 XSLT slt 文件,因此我使用 ClassLoader 加载 XSLT 文件。我已经检查了执行时URL是否具有正确的路径。这是我的新代码:url.toExternalForm()
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);
它会查找并加载,但仍然无法解析其他 XSLT 文件的相对路径。myfile.xslt
我做错了什么?