<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'存在,我會如果'child1'&'anotherchild1'存在,我只需要'child1'模板優先使用'grandchildOfChild1'來做某件事。
上面的XSL爲我提供了#1,#2的預期結果,但是如果兩者都存在,那麼兩個模板都會匹配,並且兩個結果都會呈現。我如何使它只取第一個?
對我來說這個問題根本不清楚。我可以看到你輸入的所有元素,但你的解釋是有條件的。你能改說一下嗎? –
我想在嘗試解決這個問題之前要做的事情是學習如何正確使用名稱空間。這裏有幾十個關於如何做到這一點的答案。我也同意你的問題完全不清楚。請向我們展示一個真實世界的例子和期望的輸出。 – JLRishe