I've been scouring the internet for 2 days now trying to find answers to how to proper reference a multi-level XML file using Perl XML Parsers. I'm a novice Perl guy and this is my first post to this forum, so I have much to learn. I'm starting with XML::Simple. I realize that some have preferences for other libraries.
XML Sample file:
<events>
<event>
<EventObject>Application</EventObject>
<EventType>Start</EventType>
<Operation></Operation>
<EventTimestamp>Sat 11/21/2015-14:02:57.76</EventTimestamp>
</event>
<source>
<UserIPAddr>192.168.1.2</UserIPAddr>
<UserHostName>ABC-PROD-BAR-15-01A</UserHostName>
<UserUUID>EC2-User</UserUUID>
</source>
<target>
<URL>"https://foo.com/"</URL>
</target>
<payload>
<FormData></FormData>
<PackageFilename></PackageFilename>
</payload>
<event>
<EventObject>User</EventObject>
<EventType>Download</EventType>
<Operation>Acknowledge License</Operation>
<EventTimestamp>Sat 11/21/2015-14:03:10.44</EventTimestamp>
</event>
<source>
<UserIPAddr>10.120.30.4</UserIPAddr>
<UserHostName>WSM24CN502</UserHostName>
<UserUUID>simpson homer 750329 </UserUUID>
</source>
<target>
<URL>"https://dev.catalog.com/"</URL>
</target>
<payload>
<FormData></FormData>
<PackageFilename>"eclipse.luna.5.2.tag.gz"</PackageFilename>
</payload>
</events>
Sample Code:
#!perl
# use module
use XML::Simple;
use Data::Dumper;
use XML::Parser;
# create object
$xml = new XML::Simple (KeyAttr=>[]);
# read XML file
my $data = $xml->XMLin("auditfile3.xml",forcearray=>1);
#$data = $xml->XMLin("auditfile3.xml",KeyAttr=>{EventRecord=>'Event'});
print Dumper($data);
#print $data->{Events}->{Event};
#my $EventRecord = $data->{EventRecord};
#print Dumper($EventRecord);
#print $EventRecord->{EventObject};
#print $data->{EventObject};
# dereference hash ref
# access <EventRecord> array
foreach my $e (@{$data->{Event}})
{
print "EventObject: ",$e->{Event->{EventObject}}, "\n";
print "EventType: ", $e->{EventType}, "\n";
print "Operation: ", $e->{Operation}, "\n";
print "Timestamp: ", $e->{EventTimestamp}, "\n";
}