Итеративный анализ XML

Вы только начинаете работать с Ruby и у вас есть вопрос новичка по повторному анализу XML. Я пробую REXML (да, я знаю, что существуют hpricot и другие, но я начинаю с REXML, чтобы учиться). Проблема заключается в том, как итеративно пройти через XML-документ следующим образом:

<?xml version="1.0" ?>
<bars>
    <bar>
        <id>29</id>
        <foo>Something</foo>
    </bar>
    <bar>
        <id>46</id>
        <foo>Something Else</foo>
    </bar>
    ...
</bars>

Я хотел бы обрабатывать оба элемента в каждой "панели" одновременно (на самом деле, помещая оба поля в строку базы данных за одну операцию), а не просто выдергивать все "id" или "foos" сразу по всем «бары», как часто показано в учебниках. Каков наилучший способ перебора элементов «bar»? Должен ли я .each внутри «баров» или должен преобразовать структуру в массивы?


person Community    schedule 13.10.2009    source источник


Ответы (1)


Предполагая, что Bar является моделью ActiveRecord, это то, что вы хотите сделать.

require "rexml/document"
include REXML
root = Document.new(File.new(file)).root

root.elements.each("bar") do |bar|
  id = bar.elements["id"].text
  foo = bar.elements["foo"].text
  Bar.create (:id => id, :foo => foo)
end

По сути, он получает список элементов Bar, а затем просто извлекает id и foo в оператор Bar.create для каждого элемента bar в этом списке.

person EmFi    schedule 13.10.2009