我有一个像这样的xml文件。
<a>
<b>
<c>
<d>Text</d>
</c>
<c>
<d>Text</d>
</c>
</b>
<b>
<c>
<d>Text</d>
</c>
<c>
<d>Text</d>
</c>
</b>
</a>
我在<d>
节点,我需要在<c>
内获取<b>
节点的数量。请注意,这只是一个示例,因此我们可以拥有更深层次的结构,而<c>
将不会是<d>
的直接父级。
那么,我需要什么。我需要在第一个<d>
节点1(因为我们在<c>
内,并且它在<b>
中的第一个)在第二个2,第三个1和第四个2中。我们不需要我需要计算所有<c>
元素,但只计算父<d>
内当前<b>
的父母。
现在我有
count(前面:: c)。但它会计算所有4个<c>
点头。
请帮忙。谢谢。
P.S。我正在使用xsl 1.0
答案 0 :(得分:2)
我需要在第一个
<d>
节点1中(因为我们位于<c>
内且它位于<b>
中)
所以你需要将树上到当前节点的c
祖先,然后计算c
兄弟姐妹之前的那个元素的数量:
count(ancestor::c[1]/preceding-sibling::c) + 1
+1是因为给定c
中的第一个b
将没有先前的兄弟姐妹,第二个将有一个等等。
为确保您将树上升到c
的{{1}}(例如,如果其间可能存在名为b
的其他元素),您可以更具体< / p>
c
仅定位自己有count(ancestor::c[parent::b][1]/preceding-sibling::c) + 1
作为其父级的c
。
答案 1 :(得分:1)
只需前往您想要去的水平并计算孩子。
count(../../c)
或
count(ancestor::b[1]/c)