parse convert ruby xml-parsing

ruby - convert - Happymapper(fork)-salida de múltiples clases



parse xml nokogiri (1)

Esto es más o menos directo copiar / pegar de los documentos. Espero que te traiga lo que quieres.

Las partes más importantes son llamar a Address.parse lugar de Country.parse y hacer referencia a los campos de Country como output.country.code lugar de output.code . Luego funciona exactamente como se anuncia en el archivo léame de Happymapper.

#!/usr/bin/env ruby require ''happymapper'' ADDRESS_XML_DATA = <<XML <root> <address location=''home''> <street>Milchstrasse</street> <street>Another Street</street> <housenumber>23</housenumber> <postcode>26131</postcode> <city>Oldenburg</city> <country code="de">Germany</country> </address> </root> XML class Country include HappyMapper tag ''country'' attribute :code, String content :name, String end class Address include HappyMapper tag ''address'' has_many :streets, String, :tag => ''street'' def streets @streets.join(''/n'') end element :postcode , String , :tag => ''postcode'' element :housenumber, String , :tag => ''housenumber'' element :city , String , :tag => ''city'' element :country , Country, :tag => ''country'' end outputs = Address.parse(ADDRESS_XML_DATA) outputs.each do |output| puts output.country.code puts output.country.name puts output.housenumber end

Mi pregunta se relaciona con la creación de resultados basados ​​en la documentación en https://github.com/dam5s/happymapper, que es la bifurcación de happymapper que usa nokogiri.

He usado 2 ejemplos para jugar con la documentación. Este es mi ejemplo.

xml_doc = <<EOF <address location=''home''> <street>Milchstrasse</street> <street>Another Street</street> <housenumber>23</housenumber> <postcode>26131</postcode> <city>Oldenburg</city> <country code="de">Germany</country> </address> EOF class Address include HappyMapper tag ''address'' element :housenumber, Integer, :tag => "housenumber" end class Country include HappyMapper tag ''country'' attribute :code, String content :name, String end outputs = Country.parse(xml_doc) outputs.each do |output| puts output.code puts output.name puts output.housenumber end

Rendimiento esperado

de Germany 23

Mi salida

sayth@sayth-E6410 ~/race (master●)$ ruby read_race.rb [ruby-2.4.0p0] de Germany read_race.rb:49:in `block in <main>'': undefined method `housenumber'' for #<Country:0x0055e55facf798 @code="de", @name="Germany"> (NoMethodError) from read_race.rb:46:in `each'' from read_race.rb:46:in `<main>''