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>

に変換される。