xslt test以查看节点是否是其父节点的前X个子节点之一

Jer*_*nch 7 xslt xpath

我正在编辑一个XSLT模板,我的技能有点生疏.

我想写一个条件来查看当前节点是否在其父节点的前三个子节点中.

<parent>
 <child>
 <child>
 <child>
 <child>
</parent>
Run Code Online (Sandbox Code Playgroud)

所以上面的前三个子元素将返回true,但是第四个将返回false,这使得子元素不会全部相同并且将拥有自己的后代变得复杂.我确信有一些简单的xpath可以做到这一点.

Tom*_*lak 20

这取决于实际情况.如果你在中间

<xsl:apply-templates select="/parent/child" />
Run Code Online (Sandbox Code Playgroud)

然后检查

<xsl:if test="position() &lt; 4">
Run Code Online (Sandbox Code Playgroud)

会做.如果您处于某个其他上下文中,一个不影响所有<child>元素的上下文,position()则将引用上下文中的位置.

如果您想要无上下文检查,您可以使用:

<xsl:if test="count(preceding-sibling::child) &lt; 3">
<!-- or -->
<xsl:if test="count(preceding-sibling::*) &lt; 3">
Run Code Online (Sandbox Code Playgroud)

要仅选择前三个<child>元素,可以是:

/parent/child[position() &lt; 4]
Run Code Online (Sandbox Code Playgroud)