1

nokogiriを使用してhtmlをループし、すべての行に対応するオブジェクトを作成したいと思います。データがオブジェクト変数を埋めるルートxpathを定義することはできますが、これらをオブジェクトとしてグループ化する方法がわかりません。

私のコードは以下の通りです。私はそれが機能しないことを知っていますが、それを機能させるためにどの方向に進むべきかわかりません。

「rubygems」が必要「nokogiri」が必要

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

class Post def initialize(v1、v2、v3)@ v1 = v1 @ v2 = v2 @ v3 = v3 end

  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

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

行の内容を取得します

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

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

a_tag.xpath( "td [1]")。each do | x_tag |

x_tag.contentを置きます

終わり

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

終わり

4

1 に答える 1

4

'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のテキストコンテンツを使用して投稿を作成します。

于 2009-07-12T09:32:31.213 に答える