簡體   English   中英

XSLT 1.0:僅根據優先級匹配兩個模板之一

[英]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>

要求:

  • 如果僅存在“ child1”,我想對“ grandchildOfChild1”進行操作
  • 如果僅存在“ anotherchild1”,我想對“ grandchildOfAnotherChild1”進行操作
  • 如果存在“ child1”和“ anotherchild1”,則我只希望“ child1”模板優先,並對“ grandchildOfChild1”執行某些操作。

上面的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM