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