Ruby XPath获取两个元素之间的同级

Ruby XPath获取两个元素之间的同级,ruby,xpath,nokogiri,mechanize,Ruby,Xpath,Nokogiri,Mechanize,使用下面的标记,我需要得到中间的tr <tr class="H03"> <td>Artist</td> ... <tr class="row_alternate"> <td>LIMP</td> <td>Orion</td> ... </tr> <tr class="row_normal"> <td>SND</td> <t

使用下面的标记,我需要得到中间的tr

<tr class="H03">
  <td>Artist</td>
  ...
<tr class="row_alternate">
  <td>LIMP</td>
  <td>Orion</td>
  ...
</tr>
<tr class="row_normal">
  <td>SND</td>
  <td>Tender Love</td>
  ...
</tr>
<tr class="report_total">
  <td>&nbsp;</td>
  <td>&nbsp;</td>
  ...
</tr>

它返回一个空数组,并且非常复杂,以至于我有限的xpath fu完全不知所措

Mechanize在这里提供了一些有用的辅助方法

假设您正在执行以下操作:

require 'mechanize'
agent = Mechanize.new
page = agent.get('http://www.website.com')
start_tr = page.at('.H03')
此时,tr将是问题中列出的第一个tr的nokogiri xml元素

然后,您可以通过以下方式迭代同级:

next_tr = start_tr.next_sibling
执行此操作,直到达到要停止的tr

trs = Array.new

until next_tr.attributes['class'].name == 'report_total'
    next_tr = next_tr.next_sibling
    trs << next_tr
end
trs=Array.new
直到下一个属性['class'].name=='report\u total'
下一个兄弟姐妹

trs您可以尝试以下xpath:

//tr[@class='H03']/following-sibling::tr[following-sibling::tr[@class='report_total']]

上面xpath选择所有
以下
tr[@class='H03']
,其中
有以下兄弟
tr[@class='report\u total']
,或者换句话说,选择的
位于
tr[@class='report\u total']
前面,谢谢您的回答。这非常有效,并向我介绍了我不熟悉的mechanize。
//tr[@class='H03']/following-sibling::tr[following-sibling::tr[@class='report_total']]