nokogiri


require 'nokogiri'
html = Nokogiri.HTML(open("bar.html"))
nodes = html.css("a")
nodes.each{|a| puts a.content}

gem install nokogiri

    • 読み込み
html = Nokogiri.HTML(io)
xml = Nokogiri.XML(io)
xml = Nokogiri.XML("<a>foo</a>")

    • ノード検索
nodes = html.xpath("//a")   # XPathによる検索
nodes = xml.css("a")   # CSSセレクタによる検索
node = html.at_css("body")   # at_をつけると最初の要素を返す
nodes = node.css("div")   # ノード配下の検索も可能

tag = node.name   # 名前(タグ名/text/commentなど?)
href = node['href']   # attribute
nodes = node.children   # 子ノードの取得(parent/next/previousもある)
str = node.content   # 文字列化したもの(子孫の内容も含む)

    • ノード生成
xml = Nokogiri.XML("<foo></foo>")   # <foo>をルートとするXMLを作成
node = xml.root   # ルートノード
child = node.add_child('<div>')   # タグによる子ノード生成
child = node.add_child(foo)   # 子ノードの追加(複数も可?)
child[0].content = "hoge"   # childは追加した要素の配列になっている
next = node.add_next_sibling(foo)   # nodeの後ろに追加
prev = node.add_previous_sibling(foo)   # nodeの前に追加
copied = node.dup(0)   # ノードのコピー(0:deep copy(default), 1:shallow copy)
xml.write_to($stdout)   # xml文書を出力
node.write_to($stdout)   # xmlの一部を出力
最終更新:2012年03月17日 20:10