【问题标题】:How to start a javax.xml.transform.Transformer transformation in a non-default XSLT mode?如何在非默认 XSLT 模式下启动 javax.xml.transform.Transformer 转换?
【发布时间】:2020-04-23 20:41:15
【问题描述】:

XSLT 支持其匹配模板的不同模式。处理以默认的未命名模式开始,但可以在每次调用 <xsl:apply-templates/> 时进行更改。但是,我想在非默认模式下开始 XSLT 处理。

我正在使用的代码当前使用javax.xml.transform.Transformer 实例来加载XSLT 样式表并执行转换。这种方法有什么方法可以在 Java 中指定我希望转换从哪种模式开始?我找不到任何东西。万一这很重要,样式表本身就是 XSLT 2.0 版。

我知道 Saxon 可以通过调用 net.sf.saxon.s9api.XsltTransformer.setInitialMode(QName) 来实现,但我要求任何带有 Java 内置解决方案的解决方案:javax.xml.transform.Transformer

【问题讨论】:

    标签: java xslt


    【解决方案1】:

    JAXP 界面是为 XSLT 1.0 设计的,它不允许您选择非默认初始模式。

    Saxon 包括对 JAXP 接口的各种扩展来绕过这些限制:将 JAXP Transformer 转换为 net.sf.saxon.jaxp.TransformerImpl 并调用 setInitialMode()

    但是,一旦您开始使用 Saxon 对 JAXP 接口的扩展,就没有理由更喜欢 JAXP 而不是 Saxon 的本机 s9api 接口 - 特别是当您开始使用 Saxon 根本不通过 JAXP 提供的 XSLT 3.0 功能时。

    【讨论】:

    • xsl:stylesheet default-mode="foo-mode" 是否可以与 JAXP 和 Saxon 9.8 及更高版本一起使用该模式作为初始模式?
    • 是的,我想是的。但是当然,JAXP 中并没有说明这应该如何工作。只是撒克逊人试图做最有意义的事情。
    • 非常感谢,这种方法有效(因为我们在后台使用 Saxon)!我同意最好使用 Saxon 的本机 s9api 接口,但试图避免重写我们的整个转换脚手架,使其适用于需要显式初始模式的单个新单元测试。
    猜你喜欢
    • 2013-04-09
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 2014-03-04
    相关资源
    最近更新 更多