【问题标题】:Choose XSLT processor depending on XSLT version根据 XSLT 版本选择 XSLT 处理器
【发布时间】:2015-07-16 09:10:54
【问题描述】:

我的应用程序有许多用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();
}

【问题讨论】:

    标签: java xslt-1.0 xslt-2.0 saxon xalan


    【解决方案1】:

    这可能是最好的方法。请注意,如果您编写一个 SAX ContentReader 来访问 xsl:stylesheet/@version,您可以通过抛出 SAXException 在知道版本后立即中止解析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 2021-04-19
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多