我正在解析一个包含如下结构的网页:
<tr>
<td>Label 1</td>
<td>Label 2</td>
<td>Label 3</td>
<td>Something else</td>
<\tr>
<tr>
<td>Item 1</td>
<td>Item 2</td>
<td>Item 3</td>
<\tr>
我需要做的是根据标签选择一个项目,所以我的想法是,如果标签位于该行的第三个标签中,我可以抓住下一行中的第三个标签来查找该项目。我无法找出以这种方式使用position()函数的方法,也许xpath(1.0)无法处理这种类型的过滤。
到目前为止我最好的尝试是://td[ancestor::tr[1]/preceding-sibling::tr[1]/td[position()]]
。我希望position()函数能够抓住<td>
在 xpath 的开头,因为 xpath 的其余部分是该节点的过滤器。
我想做的事情可能吗?
你走在正确的道路上——是的,你可以使用position()
随着count()
.
选择文本Item 2
given Label 2
:
//td[. = 'Label 2']/../following-sibling::tr/td[position() = count(//td[. = 'Label 2']/preceding-sibling::td)+1]/text()
解释:选择nth单元格所在位置n由上一行中具有所需标签的单元格之前存在的同级单元格的数量给出。实际上,使用count()
函数来确定标签行中的位置,然后通过与其匹配来选择下一行中的相应单元格position()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)