我用这样的东西完成了xslt转换:
public static String transform(Source xml, String xsltPath) {
try {
InputStream is = MyClass.class.getResourceAsStream(xsltPath);
final Source xslt = new StreamSource(is);
final TransformerFactory transFact = TransformerFactory.newInstance();
final Transformer trans = transFact.newTransformer(xslt);
final OutputStream os = new ByteArrayOutputStream();
final StreamResult result = new StreamResult(os);
trans.transform(xml, new StreamResult(os));
final String theResult = result.getOutputStream().toString();
return theResult;
}
catch (TransformerException e) {
return null;
}
}
正如您所见,xslt是从资源加载的。该函数与我需要的转换文件一起捆绑在一个库中,只要库从主方法中独立存在,这就可以工作。 但是,如果此库与Web应用程序捆绑在一起并部署在Jetty / Tomcat中,则会有点复杂。只要其自身的转换文件不引用资源中的任何其他文件就没有问题,但是使用这样的文件:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet>
<xsl:import href="import_file1.xsl" />
<xsl:import href="import_file2.xsl" />
<xsl:template name="aTtemplate">
<xsl:for-each select="document('import_file3.xml')">
...
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
无法解析导入,无法找到每个循环的文档。在Tomcat中,一种解决方法是将文件放在$ TOMCAT / bin目录中,但这对我们来说不是一个合适的解决方案。有没有任何方法可以从lib中递归获取这些资源?