Итеративный синтаксический анализ XML - PullRequest
1 голос
/ 13 октября 2009

Просто начните работать с 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 внутри "баров" или я должен преобразовать структуру в массивы?

1 Ответ

1 голос
/ 13 октября 2009

Предполагая, что 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 в этом списке.

...