1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
require 'rubygems'
gem 'happymapper', '0.1.1'
require 'happymapper'
require 'pp'

xml = <<-EOF
<products> 
  <product> 
    <title> A Title</title> 
    <features_bullets> 
      <feature>This is feature text 1</feature>
      <feature>This is feature text 2</feature> 
    </features_bullets>
  </product>
</products>
EOF

class Feature
  include HappyMapper

  element :name, String, :tag => '.'
end

class FeatureBullet
  include HappyMapper

  tag 'features_bullets'
  has_many :features, Feature
end

class Product
  include HappyMapper

  element :title, String
  has_one :features_bullets, FeatureBullet
end

Product.parse(xml).each do |product|
  puts product.title
  product.features_bullets.features.each { |f| puts "  - #{f.name}" }
end

# A Title
#  - This is feature text 1
#  - This is feature text 2