XPATH - Ruby - Nokogiri - Nodeset

时间:2012-02-08 22:53:46

标签: ruby xpath nokogiri

我有一个类似于此的表的NodeSet:

<table cellpadding="1" cellspacing="0" width="100%" border="0">
  <tr>
      <td colspan="9" class="csoGreen"><b class="white">Bill Statement Detail</b></td>
  </tr>
  <tr>
      <td><b>Bill Date</b></td>
      <td"><b>Bill Amount</b></td>

      <td"><b>Bill Due Date</b></td>
      <td"><b>Bill (PDF)</b></td>
  </tr>

<tr vAlign="top">
  <td>blahA</td>
  <td>blahB</td>
  <td>blahC</td>

  <td><a href="javascript: void(0);" onclick="javascript:window.open('/cso/displaypdfbill?selectedBillkey=447403730','_blank');">View Bill</a></td>
</tr>

现在我计划循环遍历表格中的每个onclick。

我一直试图在NodeSet上循环失败。

我最终遇到了许多失败的尝试,但我想它最终会看起来像这样:

doc_list.each_element ("//a[td/text()='onclick']/@href") do |  |
      #here I want to scan and save BlahA into a Variable 
end

2 个答案:

答案 0 :(得分:0)

你想用onclick迭代一切吗?也许:

doc.css('*[onclick]').each do |el|
    puts el[:onclick]
end

编辑:可能真正想要的是从第3行开始的每一行的第一个td:在这种情况下:

table.css('td[1]')[2..-1].each do |td|
    puts td.text
end

答案 1 :(得分:0)

有效执行此操作的关键不在您的问题中,而是在您的评论中“我想在tr中提取第一个td,其中有一个onclick”。

这个表达式就是这样:

doc.xpath('//tr[td/a/@onclick]/td[1]/text()')

实际上,这将为您提供一组所有这样的匹配。不需要迭代。