You have two options:
Upgrade to Rails 3. It already has the desired output.
gem "activemodel", '~> 3.2.12' require "active_model" # This could be an Active Record model class Result include ActiveModel::Serializers::Xml def numbers (0..5).to_a end def attributes {} end end result = Result.new puts result.to_xml(:methods => :numbers)
Outputs:
<?xml version="1.0" encoding="UTF-8"?> <result> <numbers type="array"> <number type="integer">0</number> <number type="integer">1</number> <number type="integer">2</number> <number type="integer">3</number> <number type="integer">4</number> <number type="integer">5</number> </numbers> </result>
Use XML Builder where you are in full control of the output. You will have to specify all attributes manually.
# app/views/results/show.xml.builder xml.instruct! xml.result { xml.numbers { result.numbers.each do |n| xml.number n end } }
Outputs:
<?xml version="1.0" encoding="UTF-8"?> <result> <numbers> <number>0</number> <number>1</number> <number>2</number> <number>3</number> <number>4</number> <number>5</number> </numbers> </result>