2013-03-08 152 views
1

我試圖抓住在xlm中傳遞的事件日誌條目,將它們轉換爲散列,然後存儲到數據庫中。在Ruby中訪問哈希散列哈希

我正在使用XmlSimple gem將xml輸入轉換爲散列。

測試樣本輸入:

require 'xmlsimple' 

h = XmlSimple.xml_in(' 
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> 
    <System> 
    <Provider Name="Service Control Manager" Guid="{555908d1-a6d7-4695-8e1e-26931d2012f4}" EventSourceName="Service Control Manager" /> 
    </System> 
</Event> 
', { 'KeyAttr' => 'name' }) 


puts "#{h}" 

這將返回:

{"xmlns"=>"http://schemas.microsoft.com/win/2004/08/events/event", "System"=>[{"Provider"=>[{"Name"=>"Service Control Manager", "Guid"=>"{555908d1-a6d7-4695-8e1e-26931d2012f4}", "EventSourceName"=>"Service Control Manager"}]}]} 

我如何可以訪問系統供應商GUID?

我可以做回所有的系統元素:

puts "#{h['System']}" 

然而

puts "#{h['System']['Provider'}" 

返回:

can't convert String into Integer (TypeError) 

我已經試過鑄造的結果與字符串沒有運氣。我有XmlSimple格式錯誤嗎?我正在訪問錯誤的密鑰嗎?有沒有另一種方法來做到這一點?

感謝您的幫助!

回答

1

[]"System"的開頭表示它的值是散列的陣列。同時"Provider"

puts "#{h['System'][0]['Provider'}" 

本身是一個數組,所以你就必須做同樣的它,比如:你可以這樣做

puts "#{h['System'][0]['Provider'][0]['Guid']" 
+0

謝謝!我沒有發現事件! puts「#{h ['System'] [0] ['Provider'] [0] ['Guid']}」給我的GUID值我之後。 – Michael 2013-03-08 00:51:51

1

它看起來像你只是錯過了關閉]。哈希應該沒有問題地任意嵌套。

1

h['System']是一個數組。 使用:

h['System'][0]['Provider'] 
1

小心陣列

h["System"].first["Provider"].first["Guid"]