0

我想导入一个 XSLT 样式表,但本质上是默认忽略它,并且只在调用时使用它的模板。

我们的内容包含自定义 XML + DocBook 样式表,因此它目前由两个 XSLT 转换:XML => my.xsl => docbook.xsl => XHTML。是否可以从 my.xsl 完成这一切?

<!-- My XML -->
<xsl:template match="a"/>
<xsl:template match="b"/>
<xsl:template match="c"/>

<!-- DocBook XML -->
<xsl:template match="table">
  <xsl:apply-templates select="." mode="docbook"/>
</xsl:template>

导入 docbook.xsl 样式表的问题在于它包含许多其他模板,这些模板会干扰现有模板。理想情况下,有一种方法可以将 docbook.xsl 导入指定模式,但这是不可能的。有没有办法在不修改 docbook.xsl 的情况下做到这一点?

4

2 回答 2

2

主样式表中的模板总是比导入样式表中的模板具有更高的优先级。为了避免调用导入的模板,只需在需要的情况下覆盖它们。

这应该是首选技术。另一种选择是:

  1. 识别存在潜在冲突的匹配模式。
  2. 使用模式来区分两者。
  3. 当您使用 <xsl:apply-templates> 在适合您识别的重叠模式之一的选择上调用模板时,请使用适当的模式(或无模式)来实现您的预​​期结果(主模板与导入的模板)。
于 2012-07-24T01:16:13.880 回答
1

使用模式

在导入的样式表中,所有模板都处于没有人使用的唯一名称的模式。例如,使用prefix:mymode并将前缀prefix绑定到属于您的命名空间。

要从导入的样式表调用处理,请使用

<xsl:apply-templates select="$vNodesToBeProcessed" mode="prefix:mymode"/>
于 2012-07-24T02:45:23.750 回答