2009-07-12 9 views
1

nokogiriを使用してhtmlをループし、すべての行に対応するオブジェクトを作成したいと考えています。私はオブジェクトを満たすためにデータを必要とするルートxpathsを定義することができますvariblesは由来しますが、これらをオブジェクトとしてグループ化する方法はわかりません。nokogiriを使用してテーブルをループしてオブジェクトにする方法

私のコードは以下の通りです。私はそれが動作しませんが、私はそれを動作させるために行くためにどの方向性を知っていない知っています。

"RubyGemsのが '鋸山'

DOC =鋸山:: HTML.parse(< < -HTML_END) 」 LV1LV2LV3 MV1MV2MV3 NV1NV2NV3 を必要と必要 「 HTML_END

クラスのポスト デフ(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 end

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

    def deleteFirst 
     @posts.shift 
    end 

    def deleteLast 
     @posts.pop 
    end 

リスト= PostList.new

親= doc.css( 'ボディ')。最初

「は(行

parent.xpathのcontectsを取得します// div/table [@ class = 'ipbtable']/tr ")。それぞれの| 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))

答えて

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

+0

ありがとうございます。 –

関連する問題