您需要實現接口節省內存的數據到壓縮文件net.sf.saxon.OutputURIResolver
http://www.saxonica.com/documentation/javadoc/net/sf/saxon/lib/OutputURIResolver.html
無論你喜歡,你都可以用解析方法重定向輸出。在我的情況下,這是實現類的樣子。
public class ZipOutputURIReslover implements OutputURIResolver{
private ZipOutputStream zipOut;
public ZipOutputURIReslover(ZipOutputStream zipOut) {
super();
this.zipOut = zipOut;
}
public void close(Result arg0) throws TransformerException {
try {
zipOut.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
}
public Result resolve(String href, String base) throws TransformerException {
try {
zipOut.putNextEntry(new ZipEntry(href));
} catch (IOException e) {
e.printStackTrace();
}
return new StreamResult(zipOut);
}
}
這之後,您需要註冊net.sf.saxon.OutputURIResolver
到trasnformer工廠。
ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream("file.zip"));
factory.setAttribute("http://saxon.sf.net/feature/outputURIResolver", new ZipOutputURIReslover(zipOut));
當您加載模板並運行轉換時,所有xsl:result-documents將直接寫入zipOutputStream。
答發現這裏http://sourceforge.net/p/saxon/discussion/94027/thread/9ee79dea/#70a9/6fef
'factory.setAttribute( 「http://saxon.sf.net/feature/outputURIResolver」,新ZipOutputURIReslover(zipOut));' 可以實際替換: 'transformer.getUnderlyingController()setOutputURIResolver(outputURIResolver。 );',其中'transformer'是'XsltTransformer'類的一個實例。 –