首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ruby中访问Hash of Hash的Hash

在Ruby中访问Hash of Hash的Hash
EN

Stack Overflow用户
提问于 2013-03-08 08:42:32
回答 4查看 108关注 0票数 1

我正在尝试获取传递到xlm中的事件日志条目,将它们转换为哈希,然后存储到数据库中。

我目前正在使用xml将XmlSimple输入转换为散列。

测试样本输入:

代码语言:javascript
复制
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}"

这将返回:

代码语言:javascript
复制
{"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?

我可以通过执行以下操作来返回所有系统元素:

代码语言:javascript
复制
puts "#{h['System']}"

然而,

代码语言:javascript
复制
puts "#{h['System']['Provider'}"

返回:

代码语言:javascript
复制
can't convert String into Integer (TypeError)

我尝试过将结果转换为字符串,但没有成功。我的XmlSimple格式是不是错了?我是不是访问了错误的密钥?有没有其他方法可以做到这一点?

谢谢你的帮助!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-08 08:45:39

"System"开头的[]表示它的值是一个哈希数组。您可以这样做:

代码语言:javascript
复制
puts "#{h['System'][0]['Provider'}"

同时,"Provider"本身也是一个数组,因此您必须对其执行相同的操作,例如:

代码语言:javascript
复制
puts "#{h['System'][0]['Provider'][0]['Guid']"
票数 1
EN

Stack Overflow用户

发布于 2013-03-08 08:44:37

看起来你只是错过了一个结束语]。散列应该嵌套到任意深度而不会出现问题。

票数 1
EN

Stack Overflow用户

发布于 2013-03-08 08:44:46

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

代码语言:javascript
复制
h['System'][0]['Provider']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15284737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档