在Ruby中访问哈希散列哈希

问题描述:

我试图抓住在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格式错误吗?我正在访问错误的密钥吗?有没有另一种方法来做到这一点?

感谢您的帮助!

[]"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

它看起来像你只是错过了关闭]。哈希应该没有问题地任意嵌套。

h['System']是一个数组。 使用:

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

小心阵列

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