2013-05-25 2 views
3

XML::Simple으로 XML 파일을 구문 분석하고 있습니다. XML에서 트리 양식을 가져 오는 방법이 있습니까? 그렇다면 예제로 설명하거나 CPAN 패키지를 제안하십시오.XML을 구문 분석하고 Perl에서 트리 구조를 만드는 방법

column 이후 처리해야하는 태그를 알고 싶습니다.

태그의 순서가 없습니다. column 태그는 Table 또는 display_name 뒤에 여러 번 나타날 수 있습니다.

Tab 
    column 
    Table 
     column 
    display_name 
    column 
    display_name 

XML :/P O를 예상

$VAR1 = { 
    'Table' => { 
    'column' => { 
     'display_name' => 'Department' 
    } 
    }, 
    'display_name' => [ 
    'abc', 
    'jack' 
    ], 
    'column' => [ 
    { 
     'display_name' => [ 
     'xyz', 
     'pqr' 
     ] 
    }, 
    'pwd' 
    ] 
}; 

:

$VAR1 = { 
    'column' => { 
    'display_name' => [ 
     'xyz', 
     'pqr' 
    ] 
    } 
    'Table' => { 
    'column' => { 
     'display_name' => 'Department' 
    } 
    }, 
    'display_name' => 'abc', 
    'column' => 'pwd', 
    'display_name' =>'jack' 
}; 

나는 동일한 키가 외설과 해시 아는 XML :: 간단한과

<Tab> 
    <column> 
     <display_name>xyz</display_name> 
     <display_name>pqr</display_name> 
    </column> 
    <Table> 
     <column><display_name>Department</display_name></column> 
    </Table> 
    <display_name>abc</display_name> 
    <column>pwd</column> 
    <display_name>jack</display_name> 
</Tab> 

출력 가능하지 않습니다. 태그 순서를 유지하고 태그를 인쇄 할 수있는 방법을 제안하십시오. 원하는 출력이 제안 해주십시오 얻을 수있는 또 다른 방법이 있다면

+0

왜 바퀴를 다시 만들어야 하는가? 'Dumper'를 사용하지 않고 그것을해야하는 이유가 있습니까? –

+0

@Steve : 위에서 xml의 html 코드를 인쇄하기 위해서는 traversal이 필요하기 때문에 dumper를 사용할 수 없습니다. – Ganesh

+2

@Ganesh Perl에서 기대 한 결과를 얻지 못할 것입니다. 키와 같이'display_name'과'column'을 두 번 사용하기 때문에 키 충돌이 발생합니다. XML :: Simple이 제공하는 것은 정확합니다. – Joel

답변

2

나는 같은 파일

#!/usr/sbin/perl 
use XML::Parser; 
use Data::Dumper; 
use strict; 

my $Filename = "abc.xml"; 

my $Parser = new XML::Parser(Style => 'tree'); 

my $Tree = $Parser->parsefile($Filename); 

print Dumper($Tree); 

에 대한 XML::Parser을 사용했다.

5

XML :: LibXML은 정보 손실없이 트리를 만듭니다.

use XML::LibXML qw(); 
my $parser = XML::LibXML->new(); 
my $tree = $parser->parse_file($qfn); 

거기에서 지정한 출력을 생성 할 수 있습니다. (나는 왜 당신이 원하는지 알지 못한다. 펄 코드를 출력하기를 원한다면 실행하면 데이터가 손실 될 것이기 때문이다.)

+0

답장을 보내 주셔서 감사합니다. XML :: LibXML을 사용하여 위 입력 파일에 대한 자세한 예를 제공해주십시오. $ qfn은 무엇입니까? – Ganesh

+1

@Ganesh : 파일 이름? – choroba

+3

XML 파일의 정규화 된 파일 이름, 즉 XML 파일의 절대 경로 또는 XML 파일에 대한 현재 작업 디렉토리와 관련된 경로. – ikegami

관련 문제