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



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

等等。

我想为每个猫 id 创建一个数组,并将相应的产品 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"]}

最新更新