Ваш XML не соответствует спецификации, поэтому никакой парсер не сможет обработать его как есть.Основные проблемы:
- XML чувствителен к регистру, поэтому
Item
это нечто иное, чем item
- закрывающие теги начинаются с косой черты, а не обратной косой черты
- должен быть элемент верхнего уровня
Исправляя эти проблемы, этот код работает:
use strict; use warnings;
use XML::Twig;
my $data = <<END_DATA;
<items>
<item>
<data1> data1 </data1>
<data2> data2 </data2>
</item>
<item>
<data1> data1 </data1>
<data2> data2 </data2>
</item>
</items>
END_DATA
my $t = XML::Twig->new(
twig_handlers => {
'item' => sub {
# process each item and print contents of dataN elements
print
$_->first_child_trimmed_text('data1'), "\t",
$_->first_child_trimmed_text('data2'),"\n";
},
},
)->parse($data);