1

我正在尝试获取在 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 格式是否错误?我是否访问了错误的密钥?还有另一种方法可以做到这一点吗?

谢谢你的帮助!

4

4 回答 4

1

看起来你只是错过了一个 close ]。散列应该嵌套任意深而没有问题。

于 2013-03-08T00:44:36.817 回答
1

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

h['System'][0]['Provider']
于 2013-03-08T00:44:45.953 回答
1

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

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

同时"Provider"它本身是一个数组,所以你必须为它做同样的事情,例如:

puts "#{h['System'][0]['Provider'][0]['Guid']"
于 2013-03-08T00:45:38.803 回答
1

小心数组

h["System"].first["Provider"].first["Guid"]
于 2013-03-08T00:45:41.960 回答