XSLT 1.0:仅根据优先级匹配两个模板之一



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'做某事
  • 如果只有"另一个孩子",我想用'Grandchildofanotherchild1'
  • 做点事
  • 如果'child1'&amp;存在"另一个孩子",我只想'child1'模板才能优先并与'Grandchildofchild1'做某事。

上面的XSL使我产生了#1,#2的预期结果,但是如果两个都存在,则两个模板都是匹配的,并且两个结果均被渲染。我该如何只服用第一个?

如果只有'child1',我想和 'Grandchildofchild1'

这是一个模板的示例,仅在其父 child1没有兄弟姐妹时才匹配 grandchildOfChild1

<xsl:template match="child1[count(../*) = 1]/grandchildOfChild1">
    <!-- do something with 'grandchildOfChild1' -->
</xsl:template>

您可以为第二个要求做同样的事情。


如果'child1'&amp;存在"另一个孩子",我只想要'child1' 模板优先并与 '孙子奇才1'。

这部分尚不清楚。i Think 您想拥有另一个模板:

<xsl:template match="grandchildOfChild1">
    <!-- do something else with 'grandchildOfChild1' -->
</xsl:template>

每当上述更具体的模板不适用时,这都会开始行动。

相关内容

  • 没有找到相关文章

最新更新