Вы говорите, что не можете заставить Perl "правильно проанализировать" XML, но вы не говорите, какого результата вы хотите.Если оставить в стороне тот факт, что в вашем примере XML отсутствуют некоторые закрывающие теги, возможно, вам нужно что-то вроде этого:
my $report = XMLin(\*DATA,
ForceArray => [ 'ReportHost', 'tag' ],
KeyAttr => { tag => 'name' },
ContentKey => '-content',
);
print Dumper($report);
, что дает:
$VAR1 = {
'ReportHost' => [
{
'HostProperties' => {
'tag' => {
'TAG_1' => 'tag_value',
'TAG_2' => 'tag_value'
}
},
'name' => 'UNIQUE_1'
},
{
'HostProperties' => {
'tag' => {
'TAG_1' => 'tag_value',
'TAG_2' => 'tag_value'
}
},
'name' => 'UNIQUE_2'
}
],
'name' => 'NAME'
};
И вы можете перебратьтакие данные:
my $report_hosts = $report->{ReportHost};
foreach my $report_host ( @$report_hosts ) {
print "Report: $report_host->{name}\n";
my $props = $report_host->{HostProperties}->{tag};
print " TAG_1: $props->{TAG_1}\n";
print " TAG_2: $props->{TAG_2}\n";
}
Я бы порекомендовал , используя другой модуль , хотя: -)