0
Hy, 디렉토리 및 모든 하위 디렉토리에있는 모든 파일을 연관 배열에 쓰고이 레이에서 XML을 만들고 싶습니다. 여기 내 코드가있다.Perl XML :: Simple write 디렉토리
이$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>
저를 도와주세요
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;
는이 내 출력됩니다.
대단히 감사합니다! 루프없이이 배열에서 특정 파일 이름을 검색하고 속성에 액세스 할 수있는 방법을 알고 있습니까? – AndyH
루프가 없습니까? 'print_name_if_dir'에서 생성 된 해시 참조를 파일 이름별로 두 번째 해시에 저장할 수도 있습니다 ('% filerefs'라고 부르 자). 이것을'print_name_if_dir'의 마지막 줄에 추가하십시오 :'$ filerefs {$ _} = $ filelist {file} -> [- 1];' –
Nice! 모리츠 고맙습니다. – AndyH