读取并保存标签内的自定义属性

Read and save custom attributes within tags

我想用 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

创建一个数据结构,将 "cat-ids" 与 "prod-ids" 的数组相关联,然后找到所有具有 "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"]}