【问题标题】:Merge XSLTs with import/include statement using Java使用 Java 将 XSLT 与 import/include 语句合并
【发布时间】:2019-11-28 14:41:50
【问题描述】:

假设我有两个 xslt A 和 B。在 xslt A 中,我们有一个导入/包含语句来使用来自 B 的一些模板。Java 中有没有一种方法可以生成结果 xslt(A 与导入的合并模板)??有可能吗??

SAXON 有一种方法可以导出已编译的 XSLT,但不幸的是,已编译的 XSLT 具有指向已导入 XSLT 的链接,这是我们不想要的。任何意见表示赞赏。

还没有在这方面探索过 XALAN。

【问题讨论】:

  • 是的!仍在尝试使用 SAXON API
  • 你应该多描述一下你的尝试,我赞成(因为你要求的事情是合理的,我认为,只是以一种值得改进的形式)撤消反对票(不是我)。

标签: java xslt saxon xalan


【解决方案1】:

为什么要使用 Java 而不是 XSLT?

大部分工作都很简单,只需几个模板规则即可完成:

<xsl:mode on-no-match="shallow-copy"/>
<xsl:mode name="nested" on-no-match="shallow-copy"/>

<xsl:template match="xsl:stylesheet | xsl:transform" mode="nested">
  <xsl:apply-templates mode="nested"/>
</xsl:template>

<xsl:template match="xsl:import | xsl:include" mode="#all">
  <xsl:apply-templates select="document(@href)" mode="nested"/>
</xsl:template>

但是,如果使用了某些 XSLT 功能,可能会出现一些复杂情况,例如:

  • 导入优先级可能无法正确转换

  • xsl:apply-imports 不起作用

  • xsl:stylesheet 上具有模块范围的属性(例如 exclude-result-prefixes)将丢失。

【讨论】:

  • 谢谢迈克尔凯。我们也可以使用 XSLT。也会在这个方向上进行探索。由于“导入优先级”,我假设 JAVA 处理器可以提供帮助,这就是我计划使用 Java 的原因。
  • 导入优先算法相当棘手,但在 XSLT 中实现并不比在任何语言中更难实现(我们已经做到了)。
猜你喜欢
  • 2019-08-09
  • 2016-03-21
  • 2019-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 2015-07-20
相关资源
最近更新 更多