我的应用程序有许多用XSLT 1.0
编写的旧样式表,而新的样式表是用XSLT 2.0
编写的。
使用Saxon 9.6
许多旧样式表无法正常运行,尤其是那些使用EXSLT set:distinct
的样式表。因此,我希望继续使用Xalan
转换旧的XSLT 1.0
样式表,但使用Saxon
作为新的XSLT 2.0
样式表。
在Java中,在决定xsl:stylesheet/@version
之前,阅读XSL文件的TransformerFactory
属性的最佳方法是什么?
截至目前,应用程序从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();
}
答案 0 :(得分:3)
这可能和任何方式一样好。请注意,如果您编写SAX ContentReader来访问xsl:stylesheet / @版本,则可以通过抛出SAXException来在版本知道后立即中止解析。