使用position()选择兄弟节点

时间:2015-04-19 16:55:27

标签: dom xpath

我在代码中选择特定标题后的div时遇到了问题:

<div>
    <h2>Section 1</h2>
    <div>Item 1</div>
    <div>Item 2</div>
    <h2>Section 2</h2>
    <div>Item 3</div>
    <div>Item 4</div>
    <div>Item 5</div>
</div>

我试图以某种方式使用previous-sibling来获取节点:

//div/div[preceding-sibling::h2[1][position()=1]]

我需要在位置1上拥有最近的h2兄弟姐妹的所有div,但我仍然得到所有5个项目。

你能告诉我我做错了什么吗?

位置1的示例输出(第1部分):

<div>Item 1</div>
<div>Item 2</div>

位置2的示例输出(第2节):

<div>Item 3</div>
<div>Item 4</div>
<div>Item 5</div>

1 个答案:

答案 0 :(得分:1)

这可能是一件棘手的事情,但您可以使用的一种方法是count()

//div/div[count(preceding-sibling::h2) = 1]

position()尝试无效的原因是相对于当前选择评估了position()。使用preceding-sibling::h2[1][position()=1],您将选择最近的h2,然后选择该集合中的第一个节点