我想导入一个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的情况下执行此操作?
答案 0 :(得分:2)
主样式表中的模板始终具有比导入样式表中的模板更高的优先级。要避免调用导入的模板,只需在主要情况下在必要的情况下覆盖它们。
这应该是首选技术。另一种选择是:
答案 1 :(得分:1)
使用modes 。
在导入的样式表中,所有模板都处于具有唯一名称且无人使用的模式中。例如,使用prefix:mymode
并将前缀prefix
绑定到属于您的命名空间。
要从导入的样式表调用处理,请使用:
<xsl:apply-templates select="$vNodesToBeProcessed" mode="prefix:mymode"/>