我正在尝试获取在xlm中传递的事件日志条目,将它们转换为哈希值然后存储到数据库中。
我目前正在使用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格式错误了吗?我是否访问了错误的密钥?还有另一种方法吗?
感谢您的帮助!
答案 0 :(得分:1)
看起来你只是错过了结束]
。哈希应该毫无问题地任意嵌套。
答案 1 :(得分:1)
h['System']
是一个数组。
使用:
h['System'][0]['Provider']
答案 2 :(得分:1)
[]
开头的"System"
表示其值是哈希数组。你可以这样做:
puts "#{h['System'][0]['Provider'}"
同时"Provider"
本身就是一个数组,所以你必须为它做同样的事情,例如:
puts "#{h['System'][0]['Provider'][0]['Guid']"
答案 3 :(得分:1)
小心数组
h["System"].first["Provider"].first["Guid"]