如何使用nokogiri循环遍历表并将行转换为对象

时间:2009-07-12 07:19:14

标签: ruby nokogiri loops

我想使用nokogiri循环遍历html并创建一个对应于每一行的对象。我能够定义根xpath,我希望数据填充对象varibles来自但我不知道如何将这些组合为一个对象。

我的代码如下。我知道它不起作用,但我不知道要使它工作的方向。

要求'rubygems' 要求'nokogiri'

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

班级邮报      def初始化(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

类PostList         def初始化           @posts = Array.new         端

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

    def deleteFirst
      @posts.shift
    end

    def deleteLast
      @posts.pop
    end

list = PostList.new

parent = doc.css('body')。first

获取行的竞争

parent.xpath(“// div / table [@ class ='ipbtable'] / tr”)。do do do | a_tag |

k1 =“x” k2 =“x” k3 =“x”

a_tag.xpath(“td [1]”)。每个都执行| x_tag |

将x_tag.content

放入

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

1 个答案:

答案 0 :(得分:3)

代码的主要问题似乎是你传递的字符串('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的文本内容创建一个Post。