Dada una estructura XML moderadamente compleja (docenas de elementos, cientos de atributos) sin XSD y un deseo de crear un modelo de objetos, ¿cuál es una manera elegante de evitar escribir los métodos repetitivos from_xml() y to_xml()?¿Código de Ruby para la serialización de XML rápida y sucia?
Por ejemplo, dada:
<Foo bar="1"><Bat baz="blah"/></Foo>
¿Cómo puedo evitar escribir secuencias sin fin de:
class Foo
attr_reader :bar, :bat
def from_xml(el)
@bar = el.attributes['bar']
@bat = Bat.new()
@bat.from_xml(XPath.first(el, "./bat")
end
etc...
no me importa la creación de la estructura del objeto de forma explícita; que es la serialización que sólo soy seguro que puede ser atendido con un poco de programación de alto nivel ...
No estoy tratando de salvar una o dos líneas por clase (moviendo el comportamiento from_xml en inicializador o método de clase, etc.). Estoy buscando la solución "meta" que duplica mi proceso mental:
"Sé que cada elemento se convertirá en un nombre de clase. Sé que cada atributo XML va a ser un nombre de campo. Sé que el código que se debe asignar es simplemente @ # {attribute_name} = el. [# {attribute_name}] y luego recurse en subelementos. Y viceversa en to_xml. "
estoy de acuerdo con la sugerencia de que una clase "constructor", además de XmlSimple parece el camino correcto. XML -> Hash ->? -> Object Model (! Y Ganancias)
actualización 2008-09-18 AM: Excelentes sugerencias de @Roman, @fatgeekuk y @ScottKoon parecen haber roto el problema abierto. Descargué la fuente de HPricot para ver cómo resolvió el problema; Los métodos clave son claramente instance_variable_set y class_eval. trabajo IRB es muy alentador, estoy avanzando en la aplicación .... Muy emocionados