当前位置: 代码迷 >> java >> 根据XSLT版本选择XSLT处理器
  详细解决方案

根据XSLT版本选择XSLT处理器

热度:61   发布时间:2023-07-26 14:30:18.0

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

使用Saxon 9.6许多旧样式表都无法正常运行,尤其是那些使用EXSLT set:distinct样式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 / @版本,则可以通过抛出SAXException来在版本知道后立即中止解析。