xalanのxsltを作成しました。これは、xalan cli(org.apache.xalan.xslt.Process
)で正常に機能します。xsltはxalan拡張子を使用しredirect
ます。期待どおりにいくつかのxmlファイルを生成します。
次に、Javaアプリケーションからの変換を行います。org.apache.xalan.xslt.Processのソースコードを調べましたが、少し複雑です(1,000行のif / then / else)。ドキュメントが見つかりませんでした。トランスフォームを呼び出し、出力ディレクトリを設定するための最小限のコードを調べています。
私は次のようなことを試しました:
final ByteArrayOutputStream out = new ByteArrayOutputStream();
InputStream in = null;
InputStream xsl = null;
try {
in = inputFileStream;
xsl = url.openStream();
final TransformerFactory tFactory = TransformerFactory
.newInstance();
final Transformer transformer = tFactory
.newTransformer(new StreamSource(xsl));
transformer.transform(new StreamSource(in), new StreamResult(out));
} catch (Throwable t) {
Activator.logErrorMessage(NLS.bind(
Messages.Import_XSLT_TRANSFORMATION_FAILED, t.toString()));
} finally {
IOUtils.closeQuietly(xsl);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
}
単純なxslt(つまり、リダイレクト拡張機能なし)では正常に機能します。リダイレクト拡張子を持つxsltを使用すると、通常の出力は取得されます<?xml version="1.0" encoding="UTF-8"?>
が、他の出力ファイルは取得されません(を使用した場合のようにorg.apache.xalan.xslt.Process
)。
リダイレクト拡張子を持つxsltを使用して変換し、すべての出力ファイルがどこに到達するかを知るために使用する最小限の呼び出し/ APIは何ですか?