09/01/08 07:03:39
そんなとこでメソッド分けるなよめんどいからさ
p でいろいろ表示してみるとわかるが、Hpricot の構造は
・ parse でパースした最初のHTML … Hpricot::Doc
・ 条件などで抽出されたタグ単体 … Hpricot::Elem
・ 条件で抽出された複数のタグ … Hpricot::Elememts
になってる。で、search や at は Hpricot::Elem にも Hpricot::Elememts にも定義されてるから、
search や at をし続ける限りにおいて、メソッドチェーンは途切れない。
ということで、「chk_aaa の返り値を Hpricot::Elememts のままにしておく」が正解。
Hpricot のオブジェクトを文字列にするのは検索や抽出操作が完全に終わった最後の最後に行う。
それまでは「○○タグを表すオブジェクト(が複数詰まった配列互換の何か)」として扱うのが楽。
class Blog
def chk_aaa(doc)
return doc.search("div.AAA")
end
def pick_BBB(doc)
return doc.search('div.BBB')
end
end
doc = Hpricot(open("URLリンク(example.com)").read)
aaa =Blog.new.chk_aaa(site)
puts "aaaの最初は #{aaa[0].inner_html} だよー" # ← たとえば画面表示時に文字列にする
bbb = aaa.pick_BBB(aaa)