我有一个属性,我匹配。它将匹配2个XSL模板,但其中一个比另一个更具体。但是,除非我在样式表中将'简单'(谓词不太具体)放在另一个之上,否则它将匹配更简单的一个。从http://www.w3.org/TR/xslt/#conflict和其他问题我可以看出,如果它匹配2个模板,它将使用最具体的,然后如果它们相同,它将匹配样式表中的最后一个。为什么XSL不符合此声明?
模板1:
<xsl:template match="@audit[contains($tier,'tier_3')][((starts-with(.,'approve') and contains(.,'CM')) or (contains(.,'ReviewRequested') and not(contains(.,'CM') or contains(.,'BM') or contains(.,'ME'))))]" mode="action">
模板2:
<xsl:template match="@audit[contains($tier,'tier_3')]" mode="action">
是什么规则,我不知道,是造成这种情况发生?
我更改匹配通过改变为具有1组方括号代替2:
<xsl:template match="@audit[contains($tier,'tier_3') and ((starts-with(.,'approve') and contains(.,'CM')) or (contains(.,'ReviewRequested') and not(contains(.,'CM') or contains(.,'BM') or contains(.,'ME'))))]" mode="action">
但同样的结果。
我知道这既因为如果我注释掉简单的一个,它针对模板匹配1.
任何想法一致?
[XSL模板优先顺序]的可能重复(http://stackoverflow.com/questions/5709581/xsl-template-precedence) – Ben 2012-07-16 10:15:22