2012-09-18 1 views
0

나는 데이터의 부하와 함께 거대한 XML 파일을 가지고, 나는 XML을 구문 분석하고 필요한 경우에만 데이터를 추출하는 펄 스크립트를 작성해야합니다.펄 XML 파서 및 국외 거주자

IV 는 하나가 XML을 구문 분석 펄와 해외 거주자를 사용하는 방법에 대한 좋은 tutroial 나 기사가 있다면 내가 궁금 해서요, 해외 거주자를 사용하는 들었다.

희망이 펄 감지 메신저 정말 새로운 있습니다.

+0

은 또한 펄 모듈'XML :: Simple'보고하는 것이 좋습니다. 저는 이것을 아주 많이 사용했으며 대부분의 XML 프로젝트에서 매우 효과적이라는 것을 알았습니다. 또한 사용하기 쉽고 직관적이며 직관적입니다. – David

+0

@David : XML :: Simple은 "거대한"파일에 이상적이지 않습니다. – runrig

답변

3

XML-Twig 또는 XML-Rules과 같은 일부 래퍼를 통해 간접적으로 expat을 사용하는 것이 가장 쉽습니다. 그러나 또한 XML과 같은 풀 파서 :: (해외 거주자 대신 libxml을 사용) XML-LibXML에서 LibXML :: 리더로 해석 할 수있을 것이다.

0

XML 파일이 거대하고 선택된 일부 데이터 만 필요한 경우 XML :: Reader : RS가 작업을 수행해야합니다. 기본 구문 분석 모듈로 XML :: Parser를 사용하고 expat을 사용하여 XML을 구문 분석합니다.

다음 코드는 잠재적으로 큰 XML 파일에서 필요한 정보 만 분석합니다. 당신은 메모리 효율성뿐만 아니라 속도를 원하는 경우 다음 XML :: 파서를 사용하는 것이 좋습니다, 아니 가장 빠른

use strict; 
use warnings; 

use XML::Reader::RS; 

my $rdr = XML::Reader::RS->new(\*DATA, { mode => 'branches' }, 
    { root => '/info/line[@cat="A"]', branch => [ '/' ] }); 

while ($rdr->iterate) { 
    my ($line) = $rdr->value; 

    for ($line) { 
     $_ = '' unless defined $_; 
    } 

    print "line = '$line'\n"; 
} 

__DATA__ 
<info> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
    <line cat="A">Data 0000001</line> 
    <line cat="A">Data 0000002</line> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
    <line cat="xyz">abc</line> 
</info> 

(단, XML :: 리더 :: RS는 : 그것은 단지 작은 양의 메모리를 사용합니다 직접)