0

我正在尝试选择<div>具有特定课程的 a 和<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>

我得到了divwith class "b" 和last hr之间的所有东西。选择 withhr[*n*]似乎以相反的顺序选择。... and following::hr[last()]]也可以选择最后一小时,这是我所期望的。在这个例子中,... and following::hr[2]最多会选择第一个hr,但实际上我不能保证会有多少。我怎样才能选择第一个hr

4

1 回答 1

1

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

但实际上你写following:hr[0]的,这应该是一个语法错误,除非你已经声明了命名空间前缀“following”。不知何故,我不认为您向我们展示的代码是您执行的代码。

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

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

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

于 2013-02-03T09:04:31.617 回答