Я прочесываю интернет в течение 2 дней, пытаясь найти ответы на вопрос о том, как правильно ссылаться на многоуровневый файл XML, используя Perl XML Parsers. Я новичок в Perl, и это мой первый пост на этом форуме, поэтому мне нужно многому научиться. Я начинаю с XML :: Simple. Я понимаю, что у некоторых есть предпочтения для других библиотек. Файл SampleПонимание многоуровневой ссылки на XML с использованием Perl XML Parser?
XML:
<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>
Пример кода:
#!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";
}
Когда люди рекомендуют против использования XML :: Simple, это потому, что они пострадали боль, и они знают, что вызовет у вас боль. [Get off it] (http://www.perlmonks.org/index.pl?node_id=490846) скорее, чем позже :-) –
[Почему XML: просто «обескуражен»] (http: // stackoverflow. com/questions/33267765/why-is-xmlsimple-disouraged) – Sobrique