我需要使用xsl转换xml文件,其中包括多个导入。简单的转换可以很好地工作(即使使用导入),但是它并不是我真正想要的,因为每个转换甚至有20多个导入文件。 (在使用javax.xml.transform
之前,我现在正在使用net.sf.saxon.s9api
)
我已经用氧气编译了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版本之间还可能存在某些版本不兼容的情况。