XSL:XSLT 1.0:マッチのみの優先順位に基づいて、2つのテンプレートの1
<xsl:template match="/">
<xsl:apply-templates select="*[local-name(.)='root']/*[local-name(.)='child1']" />
<xsl:apply-templates select="*[local-name(.)='root']/*[local-name(.)='child2']/*[local-name()='anotherchild1']" />
</xsl:template>
<xsl:template match="*[local-name(.)='child1']">
<!-- do something in template1 !-->
</xsl:template>
<xsl:template match="*[local-name(.)='anotherchild1']" priority="0">
<!-- do something in template2 !-->
</xsl:template>
例:
<a:root>
<b:child1>
<d:grandchildOfChild1>
</d:grandchildOfChild1>
</b:child1>
<c:child2>
<d:anotherchild1>
<d:grandchildOfAnotherChild1>
</d:grandchildOfAnotherChild1>
</d:anotherchild1>
</c:child2>
</a:root>
要件:
- のみ 'child1のが' 存在している場合は、私は「grandchildOfChild1」で何かしたいです
- 「anotherchild1」だけが存在する場合は、 'grandchildOfAnotherChild1'で何かを行うには
- 'child1' & 'anotherchild1'が存在する場合は、 'child1'テンプレートだけが優先され、 'grandchildOfChild1'で何かしたいと思います。
上記のXSLは、#1、#2のために私に期待される結果が得られますが、両方が存在している、両方の場合テンプレートが一致しているとの両方の結果がレンダリングされます。どのように最初のものだけを取るようにするのですか?
私には、質問は全く明確ではありません。あなたの入力に含まれるすべての要素を見ることができますが、あなたの説明はその存在の "条件付き"です。あなたはそれを言い換えることができますか? –
これを解決しようとする前にやるべきことは、名前空間を正しく使う方法を学ぶことだと思います。それを行う方法を示しているので、ここに何十もの答えがあります。私はあなたの質問が完全に不明であることに同意します。実際の例と望ましい出力を見せてください。 – JLRishe