我被困住了,一直在我的脑袋上敲我的头......我想从这个节点集中得到一系列哈希值。
我从Nokogiri获得了这个节点集。
joe = <sku>4A</sku>
<quantity type="integer">6</quantity>
<sku>5B</sku>
<quantity type="integer">2</quantity>
我想要的是这个:
[{"sku"=> "4A", "quantity"=> 6}, {"sku"=> "5B", "quantity"=> 2}]
我试过了:
Hash[*joe]
但这给了我:
{"<sku>4A</sku>"=> "<quantity type="integer">6</quantity>"}
我试过地图:
Hash[joe.map {|x| [x.name,x.text]}]
这几乎是它,但它在第一个2 ..
之后停止{"sku"=>"4A", "quantity"=>"6"}
我哪里误入歧途?
答案 0 :(得分:0)
尝试
key = nil
joe.each_with_object([]) do |child, akku|
if key.nil?
key = child.text
else
akku << {'sku' => key, 'quantity' => child.text.to_i}
key = nil
end
end
或(当然循环比需要的多得多)
values = joe.map(&:text)
skus = values.select.each_with_index { |item, index| index.even? }
quantites = values.select.each_with_index { |item, index| index.odd? }
result = skus.zip(quantites).each_with_object([]) do |(sku, quantity), akku|
akku << {'sku' => sku, 'quantity' => quantity.to_i}
end