根据XSLT版本选择XSLT处理器



我的应用程序有许多用XSLT 1.0编写的旧样式表,而新的样式表正在用XSLT 2.0编写。

对于Saxon 9.6,许多旧的样式表不能正常工作,特别是使用EXSLT set:distinct的样式表。因此,我想继续使用Xalan来转换旧的XSLT 1.0样式表,而使用Saxon来转换新的XSLT 2.0样式表。

在Java中,在确定TransformerFactory之前读取XSL文件的xsl:stylesheet/@version属性的最佳方法是什么?

到目前为止,应用程序从XSL文件的绝对路径创建StreamSource

Source xslSource = new StreamSource(xslFilePath);
String version = ...; // TODO Get XSLT version of XSL file
TransformerFactory transformerFactory;
if ("2.0".equals(version)) {
    transformerFactory = new net.sf.saxon.TransformerFactoryImpl();
} else {
    transformerFactory = new org.apache.xalan.processor.TransformerFactoryImpl();
}

这可能是一个很好的方法。注意,如果编写SAX ContentReader来访问xsl:stylesheet/@version,则可以在知道版本后立即抛出SAXException来中止解析。

相关内容

  • 没有找到相关文章

最新更新