0

一致する属性があります。これは 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">

これが発生する原因となっていることに気付いていないルールは何ですか?

次のように変更して、2 組ではなく 1 組の角かっこを持つように一致を変更します。

    <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 と一致するため、両方に一致することがわかります。

何か案は?

4

1 に答える 1

2

それらはすべて同じパス@auditを持ち、すべてノード テストを持っているため、すべて等しく固有です。

ノード テスト自体の複雑さは、解決のために分析されません。これはすべて、リンクしたドキュメントで明確に示されています。実際に読んだことがありますか?

特定の順序が必要な場合は、テンプレートを順序付けするか、テンプレート ルールで優先度属性を使用します。

于 2012-07-16T10:12:21.193 に答える