RailsとREXMLでRESTっぽいものを作る
REXMLはRubyの中では一番メジャーなXML用のライブラリらしい。
さっそく作ったが、いろいろひっかかるところがあった。
ソースは以下のような感じだが、一部変な書き方をしているが、
これは、こう書かないと動かないのである。
- 呼び出し側
<%= start_form_tag({ :action => 'hello' }, { :method => 'get' }) %> <input type='text' name='name' value="" /> <%= submit_tag "Search" %> <%= end_form_tag %>
- 呼び出され側
def hello if @params[:name] != nil name = @params[:name] doc = REXML::Document.new e_input = REXML::Element.new "input" e_input.add_attribute "name", name e_output = REXML::Element.new "output" e_output.add_attribute "answer", "Hello " + name + " !" e_method = REXML::Element.new "method" e_method.add_attribute "name", "hello" e_method.add(e_input) e_method.add(e_output) e_resp = REXML::Element.new "resp" e_resp.add(e_method) doc.add(e_resp) @xml = "" decl = REXML::XMLDecl.new "1.0", "UTF-8", nil decl.write(@xml, 0) doc.write(@xml, 1) render :leyout => false, :xml => @xml end end