2009-10-13 6 views
1

Ruby를 처음 시작하고 XML을 파싱하는 초보자 질문이 있습니다. 나는 (그래, 내가 Hpricot을 알고 다른 사람들이 존재하지만, 내가 배울 수있는 REXML로 시작하고있다.) REXML을 노력하고있어 문제가 반복적으로이 같은 XML의 문서를 진행하는 방법입니다 :반복적 인 구문 분석 XML

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

내가 좋아하는 것 모든 "막대"를 가로 질러 모든 "ids"또는 "foos"를 한꺼번에 뽑아 내기보다는 동시에 각 "막대"내의 두 요소를 모두 처리 (하나의 작업에서 데이터베이스 행에 두 필드를 놓기)합니다. 튜토리얼에 자주 표시됩니다. "bar"요소를 통해 반복하는 가장 좋은 방법은 무엇입니까? "bars"내에 놓아야합니까? 아니면 구조체를 배열로 변환해야합니까?

답변

1

바가 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.create 문에 ID와 foo를 가져옵니다.