このような演習を行いました。XML::Simple によって配列に折りたたまれた XML 要素の数を計算するにはどうすればよいので、要素の数をハードコードする必要はありませんか? このコードを使用して、より大きな xml ファイルを解析する予定です。手動で要素を数えたくありません。
いくつかのカウントを使用して、マジック ナンバーを置き換えることはできますperson.count
かhobbie.length
?
#!/usr/bin/perl -w
use strict;
use XML::Simple;
use Data::Dumper;
my $tree = XMLin('./t1.xml');
print Dumper($tree);
print "\n";
for (my $i = 0; $i < 2; $i++) # magic number '2'
{
print "$tree->{person}->[$i]->{first_name} $tree->{person}->[$i]->{last_name}\n";
print "\n";
for (my $j = 0; $j < 3; $j++) # magic number '3'
{
print $tree->{person}->[$i]->{hobbie}->[$j], "\n";
}
print "\n";
}
出力:
could not find ParserDetails.ini in C:/Perl/site/lib/XML/SAX
$VAR1 = {
'person' => [
{
'hobbie' => [
'bungy jumping',
'sky diving',
'knitting'
],
'last_name' => 'Bloggs',
'first_name' => 'Joe'
},
{
'hobbie' => [
'Swim',
'bike',
'run'
],
'last_name' => 'LIU',
'first_name' => 'Jack'
}
]
};
Joe Bloggs
bungy jumping
sky diving
knitting
Jack LIU
Swim
bike
run
以下のような私のXmlソースファイル
<Document>
<person>
<first_name>Joe</first_name>
<last_name>Bloggs</last_name>
<hobbie>bungy jumping</hobbie>
<hobbie>sky diving</hobbie>
<hobbie>knitting</hobbie>
</person>
<person>
<first_name>Jack</first_name>
<last_name>LIU</last_name>
<hobbie>Swim</hobbie>
<hobbie>bike</hobbie>
<hobbie>run</hobbie>
</person>
</Document>