我正在尝试选择<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}}?
答案 0 :(得分:1)
嗯,首先,following::hr[0]
始终是一个空序列,因为节点从1开始编号;所以这部分条件是假的,所以你的查询应该什么也不做。
但实际上您编写了following:hr[0]
,除非您已声明名称空间前缀“follow”,否则应该是语法错误。不知怎的,我不认为你向我们展示的代码就是你执行的代码。
现在让我们假设您将其更改为following::hr[1]
。这将选择所有内容,前提是它有一个名为hr的后续元素,即直到最后hr
的所有内容,这是您要描述的症状。
要在第一个hr之前选择节点,请选择那些没有前一个hr的节点,即not(preceding::hr)
。
除了我怀疑你的所有“跟随”和“前”轴应该是following-sibling
和preceding-sibling
。