Java 根据XSLT版本选择XSLT处理器

Java 根据XSLT版本选择XSLT处理器,java,xslt-1.0,xslt-2.0,saxon,xalan,Java,Xslt 1.0,Xslt 2.0,Saxon,Xalan,我的应用程序中有许多旧样式表是用xslt1.0编写的,而新样式表是用xslt2.0编写的 使用saxon9.6时,许多旧样式表无法正常工作,尤其是使用EXSLTset:distinct的样式表。因此,我想继续使用Xalan来转换旧的xslt1.0样式表,但对新的xslt2.0样式表使用Saxon 在Java中,在决定使用TransformerFactory之前,读取xsl文件的xsl:stylesheet/@version属性的最佳方法是什么 现在,应用程序从XSL文件的绝对路径创建一个Stre

我的应用程序中有许多旧样式表是用
xslt1.0
编写的,而新样式表是用
xslt2.0
编写的

使用
saxon9.6
时,许多旧样式表无法正常工作,尤其是使用EXSLT
set:distinct的样式表。因此,我想继续使用
Xalan
来转换旧的
xslt1.0
样式表,但对新的
xslt2.0
样式表使用
Saxon

在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在已知版本后立即中止解析