這是一個簡單的東西,但現在讓我真的很瘋狂。花了幾個小時來弄清楚我以前有很多次。解析並讀取xml數組
我正在嘗試閱讀解析xmlsimple文檔。但我不知道爲什麼不能通過索引號訪問元素。我無法理解這個問題,當我在控制檯中使用它的時候,但在實際的代碼中沒有這樣做。它給了我這個錯誤的觀點頁:
undefined method `[]' for nil:NilClass
代碼:
@i = 0
list =""
while @i <= 2
puts xml
a = parsed_items["Item"][@i]["ItemId"]
list << a.to_s << ","
@i += 1
end
puts list.to_s
如果我在我的代碼手動給人int值做到這一點,然後它的工作原理:
a = parsed_items["Item"][0]["ItemId"] # it works with other exact code
更改爲@i
而不工作:
a = parsed_items["Item"][@i]["ItemId"] # it does not work with other exact code
XML:
1.9.2p290 :013 > items = "<ItemList> <Item> <ItemId>123</ItemId> <ItemName>abc</ItemName> <ItemType>xyz</ItemType> <Status>bad</Status> </Item> <Item> <ItemId>456</ItemId> <ItemName>fgh</ItemName> <ItemType>nbv</ItemType> <Status>bad</Status> </Item> </ItemList>"
=> "<ItemList> <Item> <ItemId>123</ItemId> <ItemName>abc</ItemName> <ItemType>xyz</ItemType> <Status>bad</Status> </Item> <Item> <ItemId>456</ItemId> <ItemName>fgh</ItemName> <ItemType>nbv</ItemType> <Status>bad</Status> </Item> </ItemList>"
1.9.2p290 :014 > parsed_items = XmlSimple.xml_in(items, { 'KeyAttr' => 'name' })
=> {"Item"=>[{"ItemId"=>["123"], "ItemName"=>["abc"], "ItemType"=>["xyz"], "Status"=>["bad"]}, {"ItemId"=>["456"], "ItemName"=>["fgh"], "ItemType"=>["nbv"], "Status"=>["bad"]}]}
XML:
<ItemList>
<Item>
<ItemId>123</ItemId>
<ItemName>abc</ItemName>
<ItemType>xyz</ItemType>
<Status>bad</Status>
</Item>
<Item>
<ItemId>456</ItemId>
<ItemName>fgh</ItemName>
<ItemType>nbv</ItemType>
<Status>bad</Status>
</Item>
</ItemList>