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

Nou*_*Nou 3 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>
Run Code Online (Sandbox Code Playgroud)

我很难只选择第一个<td class='wccontnetbox'>元素之后的前两个元素<td class='wcheader1'>。是否有XPath表达式可以做到这一点?

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

Way*_*ett 5

使用以下表达式选择第一个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)