Votre XML n'est pas conforme aux spécifications, donc aucun parseur ne peut le traiter tel quel. Les principaux problèmes sont les suivants:
- XML est sensible à la casse, donc
Item
est autre chose que item
- balises de fermeture commencent par barre oblique, pas anti-slash
- il devrait y avoir élément de niveau supérieur
Corriger ces problèmes, ce code fonctionne:
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);
Ce n'est pas bien formé XML et ne peut pas être pair sed par un analyseur XML. Si vous changez «<\element>» en «», cela sera OK. Après avoir lu http://search.cpan.org/~mirod/XML-Twig-3.38/Twig.pm qu'avez-vous essayé? – RedGrittyBrick
-1 pour affirmer que c'est du XML quand ce n'est pas du XML. – tadmc