1

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」または「foo」を一度にすべて取り出すのではなく、各「バー」内の両方の要素を同時に処理したい (実際には、両方のフィールドを 1 回の操作でデータベース行にドロップする)。チュートリアルでよく示される「バー」。「バー」要素を反復処理する最良の方法は何ですか? 「バー」内に .each する必要がありますか、それとも構造を配列に変換する必要がありますか?

4

1 に答える 1

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要素のBar.createステートメントにプルします。

于 2009-10-13T06:18:10.103 に答える