Hy, Я хочу записать все файлы в каталог и все подкаталоги в ассоциативный массив и создать XML из этого афера. вот мой код.Perl XML :: Simple write Directory
use strict;
use warnings;
use File::Find;
use Data::Dumper;
use XML::Simple;
my $base_dir = '.';
my $xs = new XML::Simple;
my %filelist;
find(\&print_name_if_dir, $base_dir);
sub print_name_if_dir
{
if (-f $_) {
$filelist{$File::Find::name}{size}=-s $_;
$filelist{$File::Find::name}{time}=(stat $_)[9];
}
}
print Dumper(\%filelist);
my $xml = $xs->XMLout(\%filelist, keyattr => "filename");
print $xml;
и это мой выход:
$VAR1 = {
'./out.log' => {
'size' => 51,
'time' => 1345720984
},
'./foo/bat.txt' => {
'size' => 24,
'time' => 1345708287
},
'./test.pl' => {
'size' => 438,
'time' => 1345720762
}
};
<opt>
<./out.log size="51" time="1345720984" />
<./foo/bat.txt size="24" time="1345708287" />
<./test.pl size="438" time="1345720762" />
</opt>
массив в порядке, но XML должен выглядеть следующим образом:
<file name="bla.txt">
<time>"1234"</time>
<size>"1234"</size>
</file>
пожалуйста, помогите мне.
большое спасибо! знаете ли вы, как я могу найти конкретное имя файла в этом массиве без цикла, а затем получить доступ к его атрибутам? – AndyH
Без петли? Вы могли бы просто сохранить хэш-ссылки, созданные в 'print_name_if_dir' во втором хеше, по имени файла (назовем его'% filerefs'). Добавьте это как последнюю строку в 'print_name_if_dir':' $ filerefs {$ _} = $ filelist {file} -> [- 1]; ' –
Ницца! Спасибо, Мориц. – AndyH