2011-02-05 3 views
1

나는 그것이 다음과 같습니다 ... 내가 만든 간단한 XML 파일을 구문 분석하는 것을 시도하고있다 :펄 간단한 XML 질문

<project name="AU" date="2/2/2011" location="proj1"> 
    <GenomeList name="Processed"> 
    <genome name="AU4" /> 
    </GenomeList> 
    <GenomeList name="Unprocessed"> 
     <genome name="AU1" /> 
     <genome name="AU2" /> 
     <genome name="AU3" /> 
    </GenomeList> 
</project> 

오전 데 문제가 게놈 목록의 구문 분석 : 그것은 것 같다

'Unprocessed' => { 
        'genome' => { 
           'AU2' => {}, 
           'AU3' => {}, 
           'AU1' => {} 
           } 
       }, 
'Processed' => { 
       'genome' => { 
          'name' => 'AU4' 
          } 
       } 

나는 그것이 일관성있는 방법으로 분석 얻을 수있는 방법이 있나요 : 목록에 하나의 요소가있을 때 여기에서 볼 수 있듯이 그것은 다른 방법으로 항목을 추가?

나는 valueAttr를 사용하여 시도하지만

감사

+1

누구에게 수정 해 주셔서 감사합니다. 문제가 있습니다. – avs3323

+0

관련 코드 조각을 보지 않고서 왜 작동하지 않는지 알기가 어렵습니다. –

답변

5

이 그래서 난이 사용하고있는 것입니다 추측하고있어 XML::Simple를 사용하여 꽤 일반적인 문제입니다 제대로 동작 didnt한다. ForceArray은 아마도 당신이 원하는대로 할 것입니다. 아래 예제와 출력을보십시오. 세 번째 print 문은 여러분이 원하는 것을해야합니다. XML :: Simple은 사용법이 사소하고 예측 가능한 in/out 항목 이상으로 확장되면 분명히 단순하지 않습니다. 그것을 사용하고 싶다면 "Simple"이라는 단어로 설명서를 읽지 마세요.

XML::LibXML 또는 아마도 XML::Twig도 학습 가치가 있습니다.

use warnings; 
use strict; 
use XML::Simple; 
use Data::Dumper; 
$Data::Dumper::Terse = 1; 
$Data::Dumper::Indent = 1; 

my $multi = <<""; 
<project name="AU" date="2/2/2011" location="proj1"> 
    <GenomeList name="Processed"> 
    <genome name="AU4" /> 
    </GenomeList> 
    <GenomeList name="Unprocessed"> 
     <genome name="AU1" /> 
     <genome name="AU2" /> 
     <genome name="AU3" /> 
    </GenomeList> 
</project> 

my $single = <<""; 
<project name="AU" date="2/2/2011" location="proj1"> 
    <GenomeList name="Processed"> 
    <genome name="AU4" /> 
    </GenomeList> 
    <GenomeList name="Unprocessed"> 
     <genome name="AU1" /> 
    </GenomeList> 
</project> 

print Dumper(XMLin($multi)); 
print Dumper(XMLin($single)); 
print Dumper(XMLin($single, ForceArray => 1));