gpt4 book ai didi

html - XPath:如何选择以下 sibling 直到某个 sibling

转载 作者:技术小花猫 更新时间:2023-10-29 12:33:21 26 4
gpt4 key购买 nike

对于下面的示例 HTML,返回具有 class='A' 和 class='B' 的“a”元素的 sibling 的 XPath 查询可以写为://a[@class='A']/following-sibling::a[@class='B'] .此查询输出 4 <a class="B"/>元素。

但是,我只想要 <a class="B"/>当前 <a class="A"/> 之后的元素元素,并且没有跟随其他 <a class="B"/> 的其他元素元素/节点。换句话说,我只想要以下 <a class="B"/>直到下一个兄弟元素 <a class="B"/>元素出现。

示例 HTML:

<a class='A' />
<a class='B' />
<a class='A' />
<a class='B' />
<a class='B' />
<a class='B' />

任何关于如何将我当前的 XPath 查询限制为仅那些 sibling 的想法将不胜感激:)

最佳答案

全选a具有 class 的元素B 的属性在一些特定的 a 之间用class等于A以及下一个这样的事件:

/*/a[@class='A'][$n]/following-sibling::a[
@class='B' and count(preceding-sibling::a[@class='A'])=$n]

这会选择 nth a[@class='A'] 之间的所有内容和下一个这样的元素。对于特定示例,请考虑以下输入:

<r>
<a class="A"/>
<a class="B"/>
<a class="A"/>
<a class="B"/>
<a class="B"/>
<a class="A"/>
<a class="B"/>
<a class="B"/>
<a class="B"/>
</r>

获取第二个<a class="A"/>之间的两个元素第三个<a class="A"/> :

/*/a[@class='A'][2]/following-sibling::a[
@class='B' and count(preceding-sibling::a[@class='A'])=2]

英文是这样说的:

Give me all of the a elements having a class attribute whose value is equal to B that come after the second a having a class attribute equal to A and that have only two preceding siblings having a class attribute equal to A

类似地,更一般地,我们可以应用 Kayessian 方法来查找两个节点集的交集。在给出的示例中,我们想要所有 @class='B' 的交集1) 中的元素第二个 <a class="A"/> 之后的 sibling 集合和 2) 第三个 <a class="A"/> 之前的 sibling 集.这两组的交集恰好是这两个分隔元素之间的节点,可以这样表示:

/*/a[@class='A'][2]/following-sibling::a[@class='B'][
count(.|/*/a[@class='A'][3]/preceding-sibling::a[@class='B'])=
count(/*/a[@class='A'][3]/preceding-sibling::a[@class='B'])]

关于html - XPath:如何选择以下 sibling 直到某个 sibling ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23860883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com