ruby - هابيمابر(شوكة)-الإخراج من فئات متعددة



xml-parsing (1)

هذا هو نسخ أو لصق أو أكثر مباشرة من المستندات. آمل أن يحصل لك ما تريد.

الأجزاء الأكثر أهمية تسمى Address.parse بدلا من Country.parse output.country.code إلى حقول Country ك output.country.code بدلا من output.code . ثم يعمل بالضبط كما هو معلن في التمهيدي من هابيمابر.

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

سؤالي يتعلق بإنشاء الناتج استنادا إلى الوثائق في https://github.com/dam5s/happymapper وهو مفترق هابيمابر باستخدام نوكوجيري.

لقد استخدمت مثالين في التعامل مع الوثائق. هذا هو مثالي.

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

الناتج المتوقع

de
Germany
23

بلدي الإخراج

[email protected]-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>'




xml-parsing