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>
每当上述更具体的模板不适用时,这都会开始行动。