如何从循环内返回值?

时间:2013-05-14 16:46:51

标签: ruby rexml do-loops

我正在尝试读取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

但是,最后一个元素不是单独获取值。它正在获取整个标记。有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

您的代码块{ |bike_elem| bike_elem.text.chomp if bike_elem.name == "name" }new参数列表中似乎没有意义。

bike_elem来自哪里?在这种情况下,这不是有效的Ruby。

在不知道XML的样子的情况下,很难在这里给出答案。 但我建议使用像Nokogiri,libxml这样的XML库,然后解析出来 在执行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