比较这两个XML提取:
(1)
<Parents>
<Parent>
<ChildOne>a</ChildOne>
<ChildTwo>b</ChildTwo>
<ChildThree>c</ChildThree>
</Parent>
<Parent>
<ChildOne>x</ChildOne>
<ChildTwo>y</ChildTwo>
<ChildThree>z1</ChildThree>
</Parent>
<Parent>
<ChildOne>x</ChildOne>
<ChildTwo>y</ChildTwo>
<ChildThree>z2</ChildThree>
</Parent>
</Parents>
(2)
<Parents>
<Parent>
<ChildOne>x</ChildOne>
<ChildTwo>y</ChildTwo>
<ChildThree>z1</ChildThree>
</Parent>
<Parent>
<ChildOne>x</ChildOne>
<ChildTwo>y</ChildTwo>
<ChildThree>z2</ChildThree>
</Parent>
</Parents>
假设我想为/ Parent的所有实例找到/ ChildThree的值,其中/ ChildOne的值为“x”,而/ ChildTwo的值为“y”,但如果第一个这样的实例,则添加某种额外的标记也是/ Parent
的所有实例中的第一个所以,对于上面的(1),我想要这个输出:
z1 z2
对于上面的(2),我想要这个输出:
z1这是第一个家长。 Z2
为实现这一目标,如果我使用xsl:for-each,如下所示:
<xsl:for-each select="Parent[ChildOne='x'][ChildTwo='y']">
<xsl:if test="position()>=2">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:value-of select="ChildThree"/>
<xsl:if test="ExpressionHere">
<xsl:text> This is the first Parent.</xsl:text>
</xsl:if>
</xsl:for-each>
...我需要什么XPath表达式,表达“ExpressionHere”?
答案 0 :(得分:0)
您可以在此处使用前兄弟轴来测试您当前的 Parent 元素是否包含任何兄弟姐妹。
<xsl:if test="not(preceding-sibling::Parent)">
<xsl:text>This is the first Parent.</xsl:text>
</xsl:if>
或者,如果您确实需要找到 Parent 元素的位置,无论ChildOne和ChildTwo条件如何,您都可以使用 xsl:number 命令,虽然你需要把它放在一个变量中来引用它
<xsl:variable name="position">
<xsl:number />
</xsl:variable>
<xsl:if test="$position = 1">
<xsl:text>This is the first Parent.</xsl:text>
</xsl:if>