我有一些XML:
xml = <<-EOT
<xml>
<advcampaign_categories>
<category id="85">Sport</category>
<category id="79">Mobile</category>
<category id="62">Flowers</category>
</advcampaign_categories>
</xml>
EOT并希望解析它:
id=[]
text=[]
doc = Nokogiri::XML(xml)
doc.search('advcampaign_categories').each do |cat|
c = cat.at('category')
text << c.text
id << c['id']
end
h = Hash[text.zip id]我的目标是得到像{sport:85, mobile:79..etc}这样的散列。
这个代码的问题是它只返回一个元素sport:85。
有什么建议吗?
发布于 2014-11-06 17:33:18
require 'nokogiri'
doc = Nokogiri::XML.parse <<-EOT
<xml>
<advcampaign_categories>
<category id="85">Sport</category>
<category id="79">Mobile</category>
<category id="62">Flowers</category>
</advcampaign_categories>
</xml>
EOT
# if you are >= 2.1
doc.css('category').map { |node| [node.text, node['id'].to_i] }.to_h
# => {"Sport"=>85, "Mobile"=>79, "Flowers"=>62}
# if you are below version < 2.1
Hash[doc.css('category').map { |node| [node.text, node['id'].to_i] }]
# => {"Sport"=>85, "Mobile"=>79, "Flowers"=>62}https://stackoverflow.com/questions/26785643
复制相似问题