xpath选择特定节点的以下节点

时间:2011-12-12 21:37:26

标签: xpath

基于此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表达式来执行此操作?

更新:这些元素是动态的。

1 个答案:

答案 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)]