Итеративный синтаксический анализ 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>

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

13.10.2009 04:26:35
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 в этом списке.

1
13.10.2009 06:18:10