1

xlmで渡されたイベントログエントリを取得し、それらをハッシュに変換してからデータベースに保存しようとしています。

私は現在、XmlSimplegemを使用して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

クロージングが足りないようです]。ハッシュは問題なく任意の深さにネストする必要があります。

于 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 に答える