根据 XSLT 版本选择 XSLT 处理器
Choose XSLT processor depending on XSLT version
我的应用程序有许多用 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 来中止解析。
我的应用程序有许多用 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 来中止解析。