Gerando um modelo de objeto em Ruby a partir de um DTD XML
Pergunta
Tenho um documento XML com DTD e adoraria poder acessar o modelo XML, algo assim:
title = Thing.Items[0].Title
Existe uma maneira, em Ruby, de gerar esse tipo de modelo de objeto baseado em um DTD?Ou estou preso usando REXML?
Obrigado!
Solução
Você pode usar a versão Ruby do xml-simple.
Você não deve precisar instalar o gem, pois acredito que ele já esteja instalado com Rails.http://xml-simple.rubyforge.org/
Outras dicas
se você incluir a gem active_support (vem com Rails), ela adiciona o método from_xml ao objeto Hash.Você pode então chamar Hash.from_xml(xml_content) e ele retornará um hash que você pode usar para acessar os dados.
Não conheço uma maneira fácil de mapear um xml para um objeto, mas você pode criar uma classe wrapper que delegue as chamadas de método ao hash subjacente que contém os dados.
Eu sei que esta pergunta foi feita há algum tempo, mas se você quiser o verdadeiro formato do tipo Thing.Items[0].Title, tudo que você precisa fazer é usar OpenStruct.
require 'rubygems'
require 'activesupport' # For xml-simple
require 'ostruct'
h = Hash.from_xml File.read('some.xml')
o = OpenStruct.new h
o.thing.items[0].title