Удалить узлы из таблицы HTML с помощью Nokogiri - PullRequest
0 голосов
/ 16 августа 2011

Я почесал голову над этим некоторое время. Помоги мне, прежде чем я начну ломать голову.

У меня есть HTML-документ, в котором есть таблица событий, в которой столбцы содержат «Вход» и «Выход». Запись может быть событием In или Out. Я не хочу получать только строки со значениями в столбце «В», а затем сохранять текст в модели событий с теми же атрибутами. Ниже приведен код, который возвращает «0».

#!/usr/bin/env ruby

require 'rubygems'
require 'nokogiri'


doc = Nokogiri::HTML <<-EOS
  <table><thead><th>Reference</th><th>Event Date</th><th>Event Details</th><th>In</th><th>Out</th></thead><tbody><tr><td>BCE16</td><td>2011-08-16 11:14:52</td><td>Received from Arap Moi</td><td>30.00</td><td></td></tr><tr><td>B07K2</td><td>2011-08-16 11:10:06</td><td>Sent out to John Doe.</td><td>&nbsp;</td><td>-50.00</td></tr></tbody><tfoot></tfoot></table>
EOS


minus_received = doc.xpath('//td[contains(text(), "Received from")]').each do |node| 
  node.parent.remove
end

p minus_received.to_s

человекочитаемая разметка

<table>
  <thead>
    <th>Reference</th>
    <th>Event Date</th>
    <th>Event Details</th>
    <th>In</th>
    <th>Out</th>
  </thead>

  <tbody>
  <tr>
    <td>BCE16</td>
    <td>2011-08-16 11:14:52</td>
    <td>Received from Arap Moi.</td>
    <td>30.00</td>
    <td></td>
  </tr>
  <tr>
    <td>B07K2</td>
    <td>2011-08-16 11:10:06</td>
    <td>Sent out to John Doe.</td>
    <td>&nbsp;</td>
    <td>-50.00</td>
  </tr>
  </tbody>
  <tfoot></tfoot>
</table>

Я ценю вашу помощь.

1 Ответ

1 голос
/ 16 августа 2011

Вы выводите значение .each - если вы посмотрите на doc после завершения каждого вашего вызова, html содержит только заголовок и John Doe.

...