2013-05-14 85 views
0

我想讀取一個XML文件並將結構存儲到一個對象數組中。這裏是我的代碼:如何從循環內部返回值?

class Bike 
    attr_accessor :id, :color, :name 
    def initialize(id, color, name) 
     @id = id 
     @color = color 
     @name = name 
    end 
end 

---x---snip---x--- 

rules.root.each_element do |node1| 
    case node1.name 
    when "Bike" 
     bike = Bike.new(node1.attributes['id'], node1.attributes['color'], { |bike_elem| bike_elem.text.chomp if bike_elem.name == "name"}) 
     bikes.push bike 
    end 
end 

但是,最後一個元素沒有單獨獲取值。它正在讀取整個標籤。有沒有更好的方法來做到這一點?

+0

我不認爲這是一個有效的Ruby表達式。 – sawa 2013-05-14 16:50:42

+0

我不認爲你的問題與迭代(或者說,你的話中的「循環」)有任何關係。 – sawa 2013-05-14 16:53:00

回答

1

您的代碼塊{ |bike_elem| bike_elem.text.chomp if bike_elem.name == "name" }new參數列表中似乎沒有意義。

bike_elem從哪裏來?在這種情況下,這不是有效的Ruby。

如果不知道XML是什麼樣子,很難在這裏給出答案。 但我建議使用像Nokogiri這樣的XML庫,libxml,然後在執行new之前解析出名稱 。嘗試使用XPath

rules.root.each_element do |node1| 
    case node1.name 
    when "Bike" 
     name = node1.attributes[....] 
     bike = Bike.new(node1.attributes['id'], node1.attributes['color'],name) 
     bikes.push bike 
    end 
end 
+0

是不是bike_elem.text.chomp最後一個被評估? – 2013-05-14 16:51:14