2010-11-27 2 views
1

Часть XML выглядит следующим образом:XML :: Twig игнорирует некоторые элементы?

<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> 

Мой код:

#!/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>Special implements for lifting subsoil layers</text> я думаю его потому, что <ipcEntry kind="2" symbol="A01B0013100000" ipcLevel="A" entryType="K" lang="EN" nocore="yes"> имеет другой суб ipcEntry.

Я могу получить <text>Means for distributing the layers on the surface</text>.

что я делаю неправильно здесь?

Спасибо,

+1

Что именно вы хотите получить? – 2010-11-27 18:04:46

+0

в основном, чтобы напечатать все элементы , а также атрибуты каждого snoofkin 2010-11-27 18:25:55

ответ

6

С XML :: Twig документация:

вровень Этот метод не следует использовать, всегда смывать прутик, а не элемента.

чистка. То же, что и «флеш» , за исключением того, что он не печатает веточку. Он просто удаляет все элементы, которые были полностью разобраны.

Замена функции продувки с помощью функции удаления печатает текст всех элементов 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; 
} 
Смежные вопросы