gpt4 book ai didi

xPath:选择following-sibling 和self 节点

转载 作者:行者123 更新时间:2023-12-03 16:55:46 24 4
gpt4 key购买 nike

从这段 HTML 中:

<tbody>
<tr>
<tr id="1" class="first">
<tr id="2" class="">
<tr id="3" class="last">
<tr id="4" class="first">
<tr id="5" class="">
<tr id="6" class="last">
<tbody>

我试图让一个 xPath 表达式返回所有 tr[@class='first'] 节点,然后是 tr 没有“第一”类,包括第一个节点。在这种情况下,一组 tr 的 id 为 1、2、3 和 tr 的 id 为 4、5、6。

我试过使用:
//tbody/tr[@class='first']/self::* | following-sibling::tr[not(starts-with(@class, 'first'))]

没有成功。对此有什么想法吗?

谢谢

最佳答案

虽然这不是您想要的,但此表达式将返回第一类和最后一类之间的所有节点,但不会将它们组合在一起。这是您仅使用一个 XPath 表达式所能做的最好的事情。

给定这样的输入,

<tbody>
<tr id="0" class=""/>
<tr id="1" class="first"/>
<tr id="2" class=""/>
<tr id="3" class="last"/>
<tr id="4" class="first"/>
<tr id="5" class=""/>
<tr id="6" class="last"/>
<tr id="7" class=""/>
</tbody>

这个 XPath 表达式,
/tbody/tr[
(following-sibling::tr[@class='last'] and preceding-sibling::tr[@class='first'])
or @class='first' or @class='last'
]

将返回这些节点:
<tr id="1" class="first" />
<tr id="2" class="" />
<tr id="3" class="last" />
<tr id="4" class="first" />
<tr id="5" class="" />
<tr id="6" class="last" />

该表达式通过检查所有 tr 来工作。其前面的兄弟是“第一个”并且其后面的兄弟是“最后一个”的元素。这样它将排除 tr在那些之外。

但是,它不进行任何分组。我不知道有任何方法可以使用单个 XPath 表达式进行这种分组。如果我必须这样做,我会让一个 XPath 表达式返回所有“第一” tr s,然后穿过它的 sibling ,直到找到“最后一个” tr .也许其他人知道更好的方法来做到这一点。

关于xPath:选择following-sibling 和self 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3236869/

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