net.sf.saxon.OutputURIResolver
インターフェイスhttp://www.saxonica.com/documentation/javadoc/net/sf/saxon/lib/OutputURIResolver.htmlを実装する必要があります
。resolveメソッドで出力をリダイレクトできます。私の場合、これは実装されたクラスがどのように見えるかです。
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