如何 运行 在 java 中使用 .sef 进行 XSLT 转换
How to run XSLT transformation using .sef in java
我需要用 xsl 转换 xml 文件,其中包括多个导入。简单的转换工作正常(即使使用导入),但这不是我真正想要的,因为每个转换甚至有超过 20 个导入文件。 (在我使用 net.sf.saxon.s9api
之前,我现在正在使用 javax.xml.transform
)
我用 oxygen 编译了 xslt 并得到了一个 .sef 文件——它应该已经包含了所有文件,但现在我收到以下错误:
Error at package on line 2 column 321 of file.sef.xml:
XTSE0150: The supplied file does not appear to be a stylesheet
javax.xml.transform.TransformerConfigurationException: Failed to compile stylesheet. 1 error detected.
我认为问题是它试图编译一个编译文件,但我不知道如何解决这个问题。
这是我现在拥有的基本代码:
public String transform(File xslt, String xml) throws TransformerException {
TransformerFactory tFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null);
Transformer transformer = tFactory.newTransformer(new StreamSource(xslt));
final StringWriter writer = new StringWriter();
StreamResult standardResult = new StreamResult(writer);
transformer.transform(new StreamSource(new StringReader(xml)), standardResult);
return writer.toString();
}
Saxon 9.9 应该在所有接受源样式表的地方都接受 SEF 文件。事实上,我刚刚确认您的代码在 9.9 中接受 SEF 文件。但是 9.8 就不是这样了,所以首先要检查 Saxon 版本。
也有可能是用于创建 SEF 文件的 oXygen 版本与您用来加载和执行它的 Saxon 版本之间存在一些版本不兼容。
我需要用 xsl 转换 xml 文件,其中包括多个导入。简单的转换工作正常(即使使用导入),但这不是我真正想要的,因为每个转换甚至有超过 20 个导入文件。 (在我使用 net.sf.saxon.s9api
之前,我现在正在使用 javax.xml.transform
)
我用 oxygen 编译了 xslt 并得到了一个 .sef 文件——它应该已经包含了所有文件,但现在我收到以下错误:
Error at package on line 2 column 321 of file.sef.xml:
XTSE0150: The supplied file does not appear to be a stylesheet
javax.xml.transform.TransformerConfigurationException: Failed to compile stylesheet. 1 error detected.
我认为问题是它试图编译一个编译文件,但我不知道如何解决这个问题。
这是我现在拥有的基本代码:
public String transform(File xslt, String xml) throws TransformerException {
TransformerFactory tFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null);
Transformer transformer = tFactory.newTransformer(new StreamSource(xslt));
final StringWriter writer = new StringWriter();
StreamResult standardResult = new StreamResult(writer);
transformer.transform(new StreamSource(new StringReader(xml)), standardResult);
return writer.toString();
}
Saxon 9.9 应该在所有接受源样式表的地方都接受 SEF 文件。事实上,我刚刚确认您的代码在 9.9 中接受 SEF 文件。但是 9.8 就不是这样了,所以首先要检查 Saxon 版本。
也有可能是用于创建 SEF 文件的 oXygen 版本与您用来加载和执行它的 Saxon 版本之间存在一些版本不兼容。