我尝试在具有指定 id 的 div 的后代中查找所有秒 td,即 22 和 222。我想到的第一个解决方案是:
//div[@id='indicator']//td[2]
但它只选择第一个表格单元格,即 22 但不是 22 和 222。然后我用 /descendant-or-self::node()/ 替换了 // 并得到了相同的结果(显然)。但是当我删除“-or-self”时,xpath 表达式开始按预期工作
test1 = test_tree.xpath(u"//div[@id='indicator']/descendant-or-self::node()/td[2]")
print len(test1) #prints 1 (first one: 22)
test1 = test_tree.xpath(u"//div[@id='indicator']/descendant::node()/td[2]")
print len(test1) #prints 2 (22 and 222)
这是测试HTML
<html>
<body>
<div id='indicator'>
<table>
<tbody>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
</tr>
<tr>
<td>11</td>
<td>22</td>
<td>33</td>
</tr>
<tr>
<td>111</td>
<td>222</td>
<td>333</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
我想知道为什么这两个表达式的工作方式不同,因为无论是否包含 div,所有 td 都是 div 元素的后代。