XPATH选择所有前面的同级仅选择第一个同级?软件I'的限制;我在用什么?
我有一个简单的表,我正试图从中解析数据,但在选择合适的元素时遇到了困难。该表的表示如下。带有XPATH选择所有前面的同级仅选择第一个同级?软件I'的限制;我在用什么?,xpath,Xpath,我有一个简单的表,我正试图从中解析数据,但在选择合适的元素时遇到了困难。该表的表示如下。带有class=“subgroup head”的2个TR是全宽列,而所有其他TR(class=“odd”或“偶数”)包含4列 <TABLE class="transfers table"> <TBODY> <TR class="subgroup-head"> <TH>Transfers In</TH>
class=“subgroup head”
的2个TR是全宽列,而所有其他TR(class=“odd”或“偶数”
)包含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”。我想我可以使用前面的兄弟姐妹
和后面的兄弟姐妹
轻松完成这项工作。但是,
//TABLE[@class='transfers TABLE']/TBODY[1]/TR[前面的兄弟姐妹::TR[contains(text(),'transfers Out')]]
仅选择带有class='subgroup-head'和文本“Transfers Out”的TR之后的第一个TR,以及
//表[@class='transfers TABLE']/TBODY[1]/TR[以下同级::TR[contains(text(),'transfers Out')]]
仅选择带有class='subgroup-head'和文本“转入”的TR。我假设两者都会选择带有“Transfers Out”文本的TR之前或之后的所有行。这是我使用的软件的问题吗
注意:我使用的软件不支持前面的或后面的单独,仅支持-sibling
我尝试了一个带有count方法的变量xpath,但它也提供了相同的结果
//TABLE[@class='transfers TABLE']/TBODY[1]/TR[count(前面的兄弟姐妹::TR[contains(text(),'transfers Out'))=1]
我找到了自己的答案,我想要的两组独立元素的选择路径是
//TABLE[@class='transfers TABLE']/TBODY[1]/TR[@class='odd'或@class='偶数][following sibling::TR[contains(text(),'transfers out')]
及
//TABLE[@class='transfers TABLE']/TBODY[1]/TR[@class='odd'或@class='偶数'][前面的兄弟姐妹::TR[contains(text(),'transfers out')]
问题在于函数调用contains(text(),'transfers out')
text()
返回包含子组头的所有文本节点子节点的节点集。这将转换为字符串以用于包含,这意味着使用集合中第一个节点的值。在本例中,这是元素之前的仅空白节点,它不匹配
如果改为使用当前上下文元素(即
),它将起作用。元素的字符串值是其所有子代文本节点的字符串值的串联,这是您想要的
因此,您需要的两个查询是:
//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')]]