XPATH - Ruby - Nokogiri - Nodeset - PullRequest
       3

XPATH - Ruby - Nokogiri - Nodeset

0 голосов
/ 09 февраля 2012

У меня есть 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>

Теперь я планирую перебирать каждый клик в таблице.

Я безуспешно пытался перебрать 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 голосов
/ 09 февраля 2012

Ключ к эффективному выполнению этого не в вашем вопросе, а в вашем комментарии: «Я хочу извлечь первый тд в том, где есть щелчок».

Это выражение делает именно это:

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

Фактически это даст вам набор всех таких совпадений. Итерация не требуется.

0 голосов
/ 09 февраля 2012

Вы хотите перебрать все одним кликом?Может быть:

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

Редактировать: то, что вы вероятно, действительно хотите, это первый тд каждой строки, начиная со строки 3.

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