2017-02-06 3 views
5

Meine Frage bezieht sich auf die Erstellung der Ausgabe basierend auf der Dokumentation unter https://github.com/dam5s/happymapper, die die Gabel von happymapper mit Nokogiri ist.Happymapper (fork) - Ausgabe aus mehreren Klassen

Ich habe 2 Beispiele verwendet, um mit Dokumentation zu spielen. Das ist mein Beispiel.

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 

Erwartete Ausgabe

de 
Germany 
23 

Mein Ausgang

[email protected] ~/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>' 
+1

Vielleicht müssen Sie der Klasse 'Country'' 'element: Hausnummer, Ganzzahl,: tag =>" Hausnummer "' hinzufügen. Da Sie keine Methode namens 'Hausnummer' definiert haben, können Sie von ihr anrufen. –

+0

Nicht 100% sicher, gute Beispiele, die nicht ganz klar sind. In einem Beispiel erstellen sie eine Funktion in der Klasse, aber das war für has_many-Elemente. – sayth

Antwort

3

Dies ist mehr oder weniger direkte Kopieren/Einfügen aus der Dokumentation. Ich hoffe es bringt dich was du willst.

Die wichtigsten Teile fordern Address.parse statt Country.parse und unter Bezugnahme auf die Country Felder als output.country.code statt output.code. Dann funktioniert es genau wie in der Readme von Happymapper angekündigt.

#!/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 
+0

Ich habe es auseinander gezogen, weil der meiste Code für mich nicht zur Ausgabe beiträgt. – sayth

+0

Sie können alles, was mit Straßen, Postleitzahl, Hausnummer und Stadt zu tun hat, sicher entfernen, wenn Sie es nicht benutzen – nus

Verwandte Themen