2012-01-29 2 views
0

내가 제대로 다음과 같은 XML 파일 구문 분석하는 Perl 스크립트를 만들기 힘든 시간을 보내고 있습니다 : 이제XML : : 간단하고 고유 한 이름

<Report name="NAME"> 
<ReportHost name="UNIQUE_1"><HostProperties> 
<tag name="TAG_1">tag_value</tag> 
<tag name="TAG_2">tag_value</tag> 
</ReportHost> 
<ReportHost name="UNIQUE_2"><HostProperties> 
<tag name="TAG_1">tag_value</tag> 
<tag name="TAG_2">tag_value</tag> 
</ReportHost> 

, 나는 그에게 전화 할 수 있어야합니다 UNIQUE_n 어쨌든, 나는 관리 할 수 ​​없었다. 덤퍼는 다음과 같은 구조를 반환

'Report' => { 
      'ReportHost' => { 
          'UNIQUE_1' => { 
              'HostProperties' => { 
                   'tag' => { [...] 

내가 ForceArray 시도를하지만 ReportHost에게 배열을하고 비참하게 실패 할 수 없었다.

+0

하지만 추천 할 것입니다 정확히? '$ data -> {Report} {ReportHost} {UNIQUE_1}','$ data -> {Report} {ReportHost} {UNIQUE_2}'등의 호스트 이름을 반복 할 필요가 있다면'keys'를 사용하십시오. – hobbs

+0

HostProperties의 종료 태그는 어디에 있습니까? XML이 올바르지 않은 것 같습니다. – dgw

답변

3

Perl이 XML을 "올바르게 구문 분석"하는 데 문제가 있다고 말하면서 어떤 결과가 나오는지 말하지 않습니다. 제공

my $report = XMLin(\*DATA, 
    ForceArray => [ 'ReportHost', 'tag' ], 
    KeyAttr => { tag => 'name' }, 
    ContentKey => '-content', 
); 

print Dumper($report); 

:이처럼 예를 들어 XML이 어떤 닫는 태그 누락 사실을 제쳐 퍼팅, 아마도 당신이 원하는 것 무엇인가

$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"; 
} 

나는 probl 무엇 using a different module :-)

+0

이것은 완벽하게 작동했습니다. 나는 그러한 옵션을 시도했지만 모두 함께 사용하지는 않았다. 고맙습니다! – Gurzo

관련 문제