Как перебирать таблицу и превращать строки в объекты с помощью nokogiri

Я хочу использовать nokogiri для циклического просмотра html и создания объекта, соответствующего каждой строке. Я могу определить корневые пути xpath, из которых я хочу, чтобы данные заполняли переменные объекта, но я не знаю, как сгруппировать их как объект.

Мой код ниже. Я знаю, что это не работает, но я не знаю, в каком направлении двигаться, чтобы это работало.

требовать 'rubygems' требовать 'нокогири'

doc = Nokogiri :: HTML.parse (‹< - HTML_END) "LV1LV2LV3 MV1MV2MV3 NV1NV2NV3" HTML_END

class Post def initialize (v1, v2, v3) @ v1 = v1 @ v2 = v2 @ v3 = v3 конец

  def v1= (v1)
    @v1 =v1
  end

  def v2
    @v2 =v2
  end

  def v3
    @v3 =v3
  end

конец

class PostList def initialize @posts = Array.new end

    def append(aPost)
      @posts.push(aPost)
      self
    end

    def deleteFirst
      @posts.shift
    end

    def deleteLast
      @posts.pop
    end

конец

list = PostList.new

parent = doc.css ('тело'). первый

получает контексты строки

parent.xpath ("// div / table [@ class = 'ipbtable'] / tr") .each do | a_tag |

k1 = "x" k2 = "x" k3 = "x"

a_tag.xpath ("td [1]"). каждый do | x_tag |

помещает x_tag.content

конец

list.append (Post.new (k1, k2, k3))

конец


person Community    schedule 12.07.2009    source источник


Ответы (1)


Основная проблема с кодом заключается в том, что вы передаете строки ('K1', 'K2', 'K3'), которые отдаленно напоминают имена переменных, а не сами переменные (k1, k2, k3). Тем не менее, вы могли бы выразить это более кратко:

doc.search('table > tr').each do |row|
  properties = row.search('td/text()').collect {|text| text.to_s}
  list.append Post.new(*properties)
end

Это просто перебирает каждую строку и создает сообщение, используя текстовое содержимое каждого td в строке.

person Chuck    schedule 12.07.2009