0

親愛なるスタックオーバーフロー コミュニティへ

初心者の質問: 次のエラーが表示されるのはなぜですか?

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

ここに私のコードがあります(ルビーのイントロガイドからコピーされました):

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
4

2 に答える 2

1

Crack::XML.parse(open(URL).read)["totals"]ですのでnil。行 7 で行う呼び出しを複数の行に分割し、各呼び出しを個別にデバッグしてみてください。多分あなたが得る答えはあなたが期待するものではありません。

于 2013-03-29T11:20:51.810 に答える
0

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
于 2013-03-30T07:45:19.910 に答える