指定された id、つまり 22 と 222 を持つ div の子孫の中からすべての秒の tds を見つけようとします。私の頭に浮かぶ最初の解決策は次のとおりです。
//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 が含まれているかどうかに関係なく、すべての tds が div 要素の子孫であるため、両方の式が同じように機能しないのはなぜでしょうか。