我想用Ruby和Nokogiri解析XML文件,为产品分配类别。 XML文件如下所示:
<cat-assignment cat-id="123" prod-id="456" />
<cat-assignment cat-id="123" prod-id="789" />
<cat-assignment cat-id="123" prod-id="234" />
<cat-assignment cat-id="456" prod-id="123" />
等等。
我想为每个cat-id创建一个数组,并在这个数组中存储相应的prod-id。有没有办法这样做?
这样的事情:
parsedXML.each do ...
...
cat_arr = p.xpath("catalog/cat-assignment[@cat-id]")
cat_arr.each do
*read all category assignments and create an array for each different cat-id and store the corresponding products within these arrays*
end
end
答案 0 :(得分:1)
创建一个数据结构,将“cat-ids”与“prod-id”数组相关联,然后找到所有带有“cat-id”的元素,并将“prod-id”附加到相关数组。
例如:
require 'nokogiri'
xml =<<-__HERE__
<catalog>
<cat-assignment cat-id="123" prod-id="456" />
<cat-assignment cat-id="123" prod-id="789" />
<cat-assignment cat-id="123" prod-id="234" />
<cat-assignment cat-id="456" prod-id="123" />
</catalog>
__HERE__
cat_prods = Hash.new { |h,k| h[k] = Array.new }
doc = Nokogiri::XML(xml)
doc.xpath('//*[@cat-id][@prod-id]').each do |el|
cat_prods[el['cat-id']] << el['prod-id']
end
cat_prods # => {"123"=>["456", "789", "234"], "456"=>["123"]}