我有一个匹配的属性。它将匹配 2 个 XSL 模板,但一个比另一个更具体。但是,除非我在样式表中将“更简单”(谓词不太具体)放在另一个之上,否则它将匹配更简单的那个。从http://www.w3.org/TR/xslt/#conflict和其他问题我可以看到,如果它匹配 2 个模板,它将使用最具体的模板,然后如果它们相同,它将匹配最后一个模板样式表。
模板 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">
我不知道是什么规则导致了这种情况发生?
我通过更改为:
<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 匹配。
有任何想法吗?