Как сгенерировать XML-файл, используя шаблоны Ruby и Builder :: XMLMarkup? - PullRequest
3 голосов
/ 09 февраля 2010

Как вы все знаете, в Rails можно использовать шаблоны Builder :: XMLMarkup для обеспечения http-отклика в формате XML вместо HTML (с помощью команды response_to). Моя проблема заключается в том, что я хотел бы использовать систему шаблонов Builder :: XMLMarkup не с Rails, а только с Ruby (то есть автономной программой, которая генерирует / выводит файл XML из шаблона XML). Тогда возникает двоякий вопрос:

  1. Как мне сказать программе Ruby, какой шаблон я хочу использовать? и
  2. Как мне сообщить классу Builder, что является выходным XML-файлом?

Уже есть аналогичный ответ на этот вопрос в Stackoverflow ( Как мне сгенерировать XML из XMLBuilder с использованием файла .xml.builder? ), но, боюсь, он действителен только для Rails. *

Ответы [ 2 ]

7 голосов
/ 09 февраля 2010

Вот простой пример, показывающий основы:

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, но это дело вкуса.

1 голос
/ 25 апреля 2013

Я использовал Наклон , чтобы сделать (первая часть) это. Это действительно просто:

require 'builder'
require 'tilt'
template = Tilt.new('templates/foo.builder')
output = template.render

Это даст вам строковое представление вашего xml. В этот момент вы можете записать его на диск самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...