[英]XSLT 1.0: Match only one of the two templates based on precedence
XSL:
<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>
要求:
上面的XSL為我提供了#1,#2的預期結果,但是如果兩者均存在,則兩個模板都將匹配,並且兩個結果都將呈現。 我怎樣才能只參加第一個?
如果僅存在“ child1”,我想對“ grandchildOfChild1”進行操作
這是僅當其父child1
沒有兄弟姐妹時才匹配grandchildOfChild1
的模板的示例:
<xsl:template match="child1[count(../*) = 1]/grandchildOfChild1">
<!-- do something with 'grandchildOfChild1' -->
</xsl:template>
您可以為第二個需求做同樣的事情。
如果存在“ child1”和“ anotherchild1”,則我只希望“ child1”模板優先,並對“ grandchildOfChild1”執行某些操作。
這部分不清楚。 我認為您想要另一個模板:
<xsl:template match="grandchildOfChild1">
<!-- do something else with 'grandchildOfChild1' -->
</xsl:template>
只要上述更具體的模板不適用,此操作便會生效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.