从子项计算祖父项内的父节点。 XSL

时间:2013-11-08 08:22:11

标签: xml xslt

我有一个像这样的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

2 个答案:

答案 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)