Générer un modèle objet dans Ruby à partir d'une DTD XML
Question
J'ai un document XML avec une DTD et j'aimerais pouvoir accéder au modèle XML, quelque chose comme ceci :
title = Thing.Items[0].Title
Existe-t-il un moyen, dans Ruby, de générer ce type de modèle objet basé sur une DTD ?Ou suis-je coincé avec REXML ?
Merci!
La solution
Vous pouvez utiliser la version Ruby de XML-simple.
Vous ne devriez pas avoir besoin d'installer la gemme car je pense qu'elle est déjà installée avec des rails.http://xml-simple.rubyforge.org/
Autres conseils
si vous incluez la gemme active_support (fournie avec des rails), elle ajoute la méthode from_xml à l'objet Hash.Vous pouvez ensuite appeler Hash.from_xml(xml_content) et il renverra un hachage que vous pourrez utiliser pour accéder aux données.
Je ne connais pas de moyen simple de mapper un XML à un objet, mais vous pouvez créer une classe wrapper qui délègue les appels de méthode au hachage sous-jacent qui contient les données.
Je sais que cette question a été posée il y a quelque temps, mais si vous voulez le vrai format de type Thing.Items[0].Title, tout ce que vous avez à faire est d'utiliser 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