基于此HTML:
< table width='300' ......>
<tbody>
< tr>
< td class = 'wcheader1'> ..... </td>
< /tr>
< tr>
< td class = 'wccontnetbox'>......< /td>
< /tr>
< tr>
< td class = 'wccontnetbox'>......< /td>
< /tr>
< tr>
< td class = 'wcheader1'> ..... </td>
< /tr>
< tr>
< td class = 'wccontnetbox'>......< /td>
< /tr>
< tr>
< td class = 'wccontnetbox'>......< /td>
< /tr>
< tr>
< td class = 'wcheader1'> ..... </td>
< /tr>
< tr>
< td class = 'wccontnetbox'>......< /td>
< /tr>
< tr>
< td class = 'wccontnetbox'>......< /td>
< /tr>
</tbody>
</table>
我在第一个<td class='wccontnetbox'>
元素之后仅选择前两个<td class='wcheader1'>
元素时遇到问题。是否有XPath表达式来执行此操作?
更新:这些元素是动态的。
答案 0 :(得分:4)
使用以下表达式选择第一个wccontnetbox
之后的前两个wcheader1
元素:
//table/tbody/tr[td[@class='wcheader1']][2]/
following-sibling::tr[td[@class='wccontnetbox']][position()<3]/td
我正在使用//
,因为您没有显示完整的输入。最好使用表格的直接路径(例如/html/body/<etc>/table...
)。
使用以下表达式选择第一个和第二个wcheader1
元素之间的所有节点:
//table/tbody/tr[td[@class='wcheader1']][1]/following-sibling::tr[
count(.|//table/tbody/tr[td[@class='wcheader1']][2]/preceding-sibling::tr)
=
count(//table/tbody/tr[td[@class='wcheader1']][2]/
preceding-sibling::tr)]/td[@class='wccontnetbox']
注意:第二个表达式使用Kayessian节点集交集公式。通常,使用以下表达式查找$set1
和$set2
:
$set1[count(.|$set2)=count($set2)]