我寫了一個xslt for xalan,與xalan cli(org.apache.xalan.xslt.Process
)一起工作正常。 xslt使用xalan擴展redirect
它確實生成了幾個像預期的xml文件。是否有可能使用javax.xml.transform.Transformer與xslt包含一些xalan:重定向?
現在我想從Java應用程序進行轉換。我查看了org.apache.xalan.xslt.Process源代碼,它有點複雜(if/then/else有1000行)。我找不到文檔。我正在查看調用轉換的最小代碼並可能設置輸出目錄。
我想是這樣的:
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,並知道所有輸出文件的最終位置?