Вот простой пример, показывающий основы:
require 'builder'
@received_data = {:books => [{ :author => "John Doe", :title => "Doeisms" }, { :author => "Jane Doe", :title => "Doeisms II" }]}
@output = ""
xml = Builder::XmlMarkup.new(:target => @output, :indent => 1)
xml.instruct!
xml.books do
@received_data[:books].each do |book|
xml.book do
xml.title book[:title]
xml.author book[:author]
end
end
end
Объект @output будет содержать вашу разметку xml:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<title>Doeisms</title>
<author>John Doe</author>
</book>
<book>
<title>Doeisms II</title>
<author>Jane Doe</author>
</book>
</books>
Документы Builder на github.com содержат дополнительные примеры и ссылки на дополнительную документацию.
Чтобы выбрать конкретный шаблон, вы можете передать аргументы в вашу программу для принятия этого решения.
В любом случае, я предпочитаю использовать libxml-ruby для анализа и построения документов XML, но это дело вкуса.