【问题标题】:Nokogiri parsingNokogiri 解析
【发布时间】:2014-11-07 03:16:25
【问题描述】:

我有一些 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

有什么建议吗?

【问题讨论】:

  • 只有一个advcampaign_categories,这就是为什么你只会得到一个结果。改为doc.search('category).each

标签: ruby-on-rails ruby parsing nokogiri


【解决方案1】:
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}

【讨论】:

    猜你喜欢
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多