REXMLを用いてDOM木の構築

そういうことをJavaでやれという課題が出たので,Ruby,REXMLでやってみようと思う.比較的Javaっぽく,おしとやかに.

require 'rexml/document'
require 'yaml'

gems = REXML::Element.new("gemlist")

yaml = YAML.load(File.open("gemlist.yml").read)

yaml.each do |e|
  gem = REXML::Element.new("gem")
  gem.add_element("name").add_text(e['name'])
  gem.add_element("description").add_text(e['description'])
  gems.add_element(gem)
end

# XMLファイルへの書き込み
File.open("gemlist.xml", "w") do |f|
  f.puts REXML::XMLDecl.new("1.0", "UTF-8")
  #=> <?xml version='1.0' encoding='UTF-8'?>
  f.puts REXML::DocType.new("gem", "SYSTEM 'gem.dtd'")
  #=> <!DOCTYPE gem SYSTEM 'gem.dtd'>
  f.puts gems
end

dtdファイルなんて作ってませんけど.入力に使用したyamlファイルは,おおよそこんな感じです.

- name: rio
  description: RIO - Ruby I/O Comfort Class
- name: ruby-growl
  description: Pure-Ruby Growl Notifier
…以下略

さすが,それなりに機能が備わってるなぁ.この勢いで,ちゃっちゃとJavaのも終わらせたいところ.