java根据XSLT版本选择XSLT处理器
我的应用程序有许多旧样式表是用XSLT 1.0
编写的,而新样式表是用XSLT 2.0
编写的
使用Saxon 9.6
时,许多旧样式表无法正常工作,尤其是使用EXSLTset:distinct
的样式表。因此,我想继续使用Xalan
来转换旧的XSLT 1.0
样式表,但对新的XSLT 2.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();
}
# 1 楼答案
这可能是最好的方法。请注意,如果编写SAX ContentReader来访问xsl:stylesheet/@version,则可以通过抛出SAXException在已知版本后立即中止解析