gpt4 book ai didi

xpath - 选择前面所有 sibling 的XPATH仅选择第一个?我使用的软件有局限性吗?

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

我有一个简单的表,试图从中解析数据,但在选择适当的元素时遇到了麻烦。该表的表示如下。带class="subgroup-head"的2个TR是全角列,而其他所有TR(class="odd" or "even")都包含4列。

<TABLE class="transfers table">
<TBODY>
<TR class="subgroup-head">
<TH>Transfers In</TH>
<TR class="odd">
<TR class="even">
<TR class="odd">
.
.
.
.
.
<TR class="subgroup-head">
<TH>Transfers Out</TH>
<TR class="odd">
<TR class="even">
<TR class="odd">
.
.
.
.


我正在尝试选择TR后面的所有带有“ Transfers In”文本的表行,直到TR带有“ Transfers Out”文本。我认为可以使用 preceding-siblingfollowing-sibling轻松地做到这一点。然而,

//TABLE[@class='transfers table']/TBODY[1]/TR[preceding-sibling::TR[contains(text(),'Transfers Out')]]

仅选择具有class ='subgroup-head'和文本“ Transfers Out”的TR之后的第一个TR,并且

//TABLE[@class='transfers table']/TBODY[1]/TR[following-sibling::TR[contains(text(),'Transfers Out')]]

仅选择class =“ subgroup-head”和文本“ Transfers In”的TR。我假设两者都将选择TR之前或之后带有“ Transfers Out”文本的所有行。我使用的软件是否有问题?

注意:我使用的软件不单独支持 precedingfollowing,仅支持-sibling。

我用count方法尝试了变体xpath,但它也提供了相同的结果
//TABLE[@class='transfers table']/TBODY[1]/TR[count(preceding-sibling::TR[contains(text(),'Transfers Out')])=1]

最佳答案

问题出在函数调用contains(text(),'Transfers Out')上。 text()返回一个包含subgroup-head节点的所有文本节点子级的节点集。这将转换为在contains中使用的字符串,这意味着将使用集合中第一个节点的值。在这种情况下,这是元素前面的仅空白节点,不匹配。

如果改用当前上下文元素(即.),它将起作用。元素的字符串值是其所有后代文本节点的字符串值的串联,这是您想要的。

因此,您需要两个查询:

//TABLE[@class='transfers table']/TBODY[1]/TR[preceding-sibling::TR[contains(.,'Transfers Out')]]




//TABLE[@class='transfers table']/TBODY[1]/TR[following-sibling::TR[contains(.,'Transfers Out')]]


(此第二行还将包括您可能要过滤掉的 Transfers In前导行)。

关于xpath - 选择前面所有 sibling 的XPATH仅选择第一个?我使用的软件有局限性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46429983/

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