红宝石。破解宝石。 - 在`<main>'中:nil的未定义方法`[]':NilClass(NoMethodError) - </main>

时间:2013-03-29 11:18:41

标签: ruby xml-parsing nomethoderror

亲爱的stackoverflow社区,

初学者的问题: 为什么会出现以下错误?

scraper_sample_2.rb:7:in `<main>': undefined method `[]' for nil:NilClass (NoMethodError)
>Exit code: 1

这是我的代码(从ruby的介绍指南中复制):

require "rubygems"
require "crack"
require "open-uri"

URL = "http://www.recovery.gov/pages/GetXmlData.aspx?data=recipientHomeMap"

Crack::XML.parse(open(URL).read)["totals"]["state"].each do |state|
    puts ["id", "awarded", "received", "jobs"].map{|f| state[f]}.join(",")
end

2 个答案:

答案 0 :(得分:1)

因为Crack::XML.parse(open(URL).read)["totals"]nil。尝试将您在第7行上执行的呼叫分成几行并分别调试每个呼叫。也许你得到的答案不是你所期望的。

答案 1 :(得分:0)

鉴于从your source返回的xml的格式,Crack::XML.parse(open(URL).read)["totals"]将像Ivaylo所说的那样返回nil。 xml的格式必须已更改,因为totals现在位于/map/view

要获得预期的输出,请将代码更改为:

Crack::XML.parse(open(URL).read)["map"]["view"]["totals"]["state"].each do |state|
    puts ["id", "awarded", "received", "jobs"].map{|f| state[f]}.join(",")
end