基于以下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>
Run Code Online (Sandbox Code Playgroud)
我很难只选择第一个<td class='wccontnetbox'>元素之后的前两个元素<td class='wcheader1'>。是否有XPath表达式可以做到这一点?
更新:那些元素是动态的。
使用以下表达式选择第一个wccontnetbox之后的前两个元素wcheader1:
//table/tbody/tr[td[@class='wcheader1']][2]/
following-sibling::tr[td[@class='wccontnetbox']][position()<3]/td
Run Code Online (Sandbox Code Playgroud)
我正在使用,//因为您没有显示完整的输入。最好使用指向表的直接路径(例如/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']
Run Code Online (Sandbox Code Playgroud)
注意:第二个表达式使用凯氏节点集相交公式。一般情况下,使用下面的表达式来找到的交叉点$set1和$set2:
$set1[count(.|$set2)=count($set2)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3298 次 |
| 最近记录: |