2010-11-27 2 views
1

일부는 다음과 같습니다XML :: 나뭇 가지가 일부 요소를 무시하고 있습니까? 는 XML의

<ipcEntry kind="1" symbol="A01B0013080000" ipcLevel="A" entryType="K" lang="EN" nocore="yes"> 
    <textBody> 
     <title> 
      <titlePart> 
       <text>for working subsoil</text> 
      </titlePart> 
     </title> 
    </textBody> 
    <ipcEntry kind="2" symbol="A01B0013100000" ipcLevel="A" entryType="K" lang="EN" nocore="yes"> 
     <textBody> 
      <title> 
       <titlePart> 
        <text>Special implements for lifting subsoil layers</text> 
       </titlePart> 
      </title> 
     </textBody> 
     <ipcEntry kind="3" symbol="A01B0013120000" ipcLevel="A" entryType="K" lang="EN" nocore="yes"> 
      <textBody> 
       <title> 
        <titlePart> 
         <text>Means for distributing the layers on the surface</text> 
        </titlePart> 
       </title> 
      </textBody> 
     </ipcEntry> 
    </ipcEntry> 
</ipcEntry> 

내 코드는 다음과 같습니다 <ipcEntry kind="2" symbol="A01B0013100000" ipcLevel="A" entryType="K" lang="EN" nocore="yes"> 다른 하위 ipcEntry을 가지고 있기 때문에 <text>Special implements for lifting subsoil layers</text> 가 나는 그것의 추측 :

#!/usr/bin/perl 
use strict; 
use warnings; 
use XML::Twig; 
use Data::Dumper; 

my $twig_handlers = { 'ipcEntry' => \&ipcEntrySub }; 

my $file = 'A01B.xml'; 
my $twig= new XML::Twig(twig_handlers => $twig_handlers); 
$twig->parsefile($file); 
#$twig->print; 




sub ipcEntrySub { 

    my ($twig_obj, $element) = @_; 

    print $element->{'att'}->{'symbol'} . "\n"; 
print "Kind: $element->{'att'}->{'kind'}\n"; 
print $element->text . "\n"; 
print "###########################################\n"; 


    $twig_obj->purge; 

} 

나는 텍스트를 얻을하지 못할 것 같다.

나는 <text>Means for distributing the layers on the surface</text>을 얻을 수 있습니다.

내가 뭘 잘못하고 있니?

감사의 XML에서

+1

정확히 출력을 원하십니까? –

+0

기본적으로 각 요소의 속성과 함께 모든 요소를 인쇄합니다. snoofkin

+2

제거하면 현재 요소 앞의 모든 요소가 해제됩니다. 요소의 부모 만 비워 둡니다. 즉, 여전히 속성에 액세스 할 수 있지만 모든 내용은 손실됩니다. 그래서 정말로 삭제하면 여기에 원하는 것입니다. – mirod

답변

6

:: 나뭇 가지 문서 :

세척이 방법은 항상 나뭇 가지 요소가 아니라 세척하여 사용할 수 없습니다.

제거 "플러시" 과 동일하게 나뭇 가지를 인쇄하지 않습니다. 그것은 은 지금까지 완전히 구문 분석 된 을 가진 모든 요소를 ​​삭제합니다.

삭제 기능을 사용하여 삭제 기능을 사용하면 모든 ipcEntry 요소의 텍스트가 역순으로 인쇄됩니다. 가장 안쪽의 ipcEntry 요소로 시작합니다.

sub ipcEntrySub { 
    my ($twig_obj, $element) = @_; 

    print $element->{'att'}->{'symbol'} . "\n"; 
    print "Kind: $element->{'att'}->{'kind'}\n"; 
    print $element->text . "\n"; 

    $element->delete; 
} 
+0

XML은 크기가 8GB입니다. 매번 삭제하지 않으면 메모리가 가득 찰 것입니다. 그렇지 않습니다. 또는 아마 나는 그 'purge'sub의 아이디어를 얻지 못한다. – snoofkin

+0

부적절한 이전 답변을 용서하십시오. "제거"기능을 사용하여 메모리를 비울 때 "제거"기능 대신 ELEMENT를 잘라야합니다. 희망이 도움이됩니다. –

+0

고마워, 내 문제가 확실히 해결 됐어! – snoofkin

관련 문제