htree
htreeとは
Rubyのライブラリ。XMLパーサでもあり、テンプレートエンジンでもある。 テンプレートエンジンはsamidareで使われている。 公式ドキュメント。
htreeの挙動は順次変更になっています。 この解説は、2004/05/30に落としてきたバージョンのhtreeに関するものです。
パース
urlからパースして、テキストが空でない要素のパスと内容を表示。とりあえずエンコードのハナシは無視。
require 'htree' require 'open-uri' url="http://kitchon.ddo.jp/~ashiya/diary" ht=HTree.parse(open(url).read) ht.make_loc.traverse_element do |n| txt=n.node.extract_text.to_s if txt !~ /^(\s\t\n\r)*$/ # 空白とか改行とか空なら無視 path=n.path puts path+":"+txt end end
XPath指定した箇所をサーチ
htree単体では対応していないので、rexmlを使う。
require "open-uri" require "htree" require "rexml/document" uri="http://kitchon.ddo.jp/~ashiya/" file=open(uri).read doc=HTree.parse(file).to_rexml names=REXML::XPath.match(doc, "//html/head/") puts names
テンプレート
メソッドhogeが"hoge!"を返すとき、
<span _text="hoge">dummy</span>
が
<span>hoge!</span>
に変換される。
メソッドnameが"Google", url="http://www.google.co.jp"を返すとき、
<A _attr_href="url" _text="name"></A>
が
<A HREF="http://www.google.co.jp">Google</A>
に変換される。
<span _if=true>data</span>
が
<span>data</span>
に変換される。
<lo _iter="['test1','test2'].each//v"> <li _text=v> </lo>
が
<lo> <li>test1</li> <li>test2</li> </lo>
に変換される。