我的想法正确吗?apply-templates
声明应匹配all哪些模板可用于选择?
例如,给定以下 xml 片段:
<doc>
<foo bar="1" baz="2">boz</foo>
</doc>
以及以下样式表:
<xsl:template match="/">
<xsl:apply-templates select="foo" mode="xyz" />
</xsl:template>
<xsl:template mode="xyz" match="foo[bar='1']">
abc
</xsl:template>
<xsl:template mode="xyz" match="foo[baz='2']">
def
</xsl:template>
我希望输出是:
abc
def
它是否正确?
不,您不会获得两种输出,因为只会选择一个模板。
看这一页 http://www.w3.org/TR/xslt#conflict如果有多个可能的模板,则冲突解决规则。
修复样式表后(与 Rubens 的做法类似,但模式相同),这通常会导致应用 xslt 文件中的最后一个模板,因此输出将是def
。这是因为这两个模板具有相同的优先级,如果您的 xslt 处理器没有因错误而停止,则标准要求它应用最后一个:
如果这留下了多个匹配的模板规则,则这是一个错误。 XSLT 处理器可能会发出错误信号;如果它没有发出错误信号,则必须通过从剩余的匹配模板规则中选择样式表中最后出现的规则来恢复。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)