在HTML中选择hr,似乎按相反的顺序选择?

时间:2013-02-03 06:17:25

标签: html xpath

我正在尝试选择<div>与某个班级之间以及之后的第一个<hr>之间的所有内容。

使用此查询:

//div[@id='a']/*[preceding::div/@class='b' and following:hr[0]]

这个例子HTML:

<div id="a">div a
    <div class="b">div b</div>
    <p>1</p>
    text1
    <a>2</a>
    text2
    <div>3</div>
    <hr>
    <div>4</div>
    <hr>
    <div>5</div>
    <hr>
</div>

我在div与班级“b”和最后 hr之间获得了所有内容。选择hr[*n*]似乎以相反的顺序选择。 ... and following::hr[last()]]也会选择最后一个小时,这就是我所期望的。在这个示例中,... and following::hr[2]将选择第一个hr,但实际上我无法保证会有多少hr。如何选择最早的{{1}}?

1 个答案:

答案 0 :(得分:1)

嗯,首先,following::hr[0]始终是一个空序列,因为节点从1开始编号;所以这部分条件是假的,所以你的查询应该什么也不做。

但实际上您编写了following:hr[0],除非您已声明名称空间前缀“follow”,否则应该是语法错误。不知怎的,我不认为你向我们展示的代码就是你执行的代码。

现在让我们假设您将其更改为following::hr[1]。这将选择所有内容,前提是它有一个名为hr的后续元素,即直到最后hr的所有内容,这是您要描述的症状。

要在第一个hr之前选择节点,请选择那些没有前一个hr的节点,即not(preceding::hr)

除了我怀疑你的所有“跟随”和“前”轴应该是following-siblingpreceding-sibling