0
我一直在测试XML::Simple
与一些xml文件输出,并已注意到如果我有一个以上的文件路径,我的脚本将工作() 2.XML)不是数组引用与perl XML ::简单代码
如果我只有(1)文件路径(1.XML),那么我会得到这个消息:Not an ARRAY reference at ./tst-simple.pl line 28
我的问题是,为什么不会对代码的工作( 1)文件路径?我正在使用ForceArray => 1。我该如何处理?
1.XML:
<?xml version="1.0" encoding="UTF-8"?>
<listing time="2011-10-04T02:33:44+0000" recursive="no" path="/storage/foobar/test/queues/20110731" exclude="" filter=".*" version="0.20.202.1.1101050227">
<directory path="/storage/foobar/test/queues/20110731" modified="2011-10-04T02:32:11+0000" accesstime="1970-01-01T00:00:00+0000" permission="drwx------" owner="unix_act" group="foobar"/>
<file path="/storage/foobar/test/queues/20110731/myfilename-00" modified="2011-10-03T04:47:46+0000" accesstime="2011-10-03T04:47:46+0000" size="123456789" app="3" blocksize="134217728" permission="-rw-------" owner="unix_act" group="foobar"/>
</listing>
2.XML:
<?xml version="1.0" encoding="UTF-8"?>
<listing time="2011-10-04T02:33:44+0000" recursive="no" path="/storage/foobar/test/queues/20110731" exclude="" filter=".*" version="0.20.202.1.1101050227">
<directory path="/storage/foobar/test/queues/20110731" modified="2011-10-04T02:32:11+0000" accesstime="1970-01-01T00:00:00+0000" permission="drwx------" owner="unix_act" group="foobar"/>
<file path="/storage/foobar/test/queues/20110731/myfilename-00" modified="2011-10-03T04:47:46+0000" accesstime="2011-10-03T04:47:46+0000" size="123456789" app="3" blocksize="134217728" permission="-rw-------" owner="unix_act" group="foobar"/>
<file path="/storage/foobar/test/queues/20110731/myfilename-01" modified="2011-10-03T04:47:46+0000" accesstime="2011-10-03T04:47:46+0000" size="123456789" app="3" blocksize="134217728" permission="-rw-------" owner="unix_act" group="foobar"/>
</listing>
代码:
use strict;
use warnings;
use XML::Simple;
use Data::Dumper;
my $xml = $ARGV [0];
my $data = XMLin($xml);
for my $xs ($xml) {
#my $data = XMLin($xs, ForceArray => 0);
my $data = XMLin($xs, ForceArray => 1);
#my $data = XMLin($xs, ForceArray => [ qw (path) ]);
print Dumper ($data);
}
foreach my $file(@{ $data->{file} })
{
my($dir, $fname);
if($file->{path} =~ /^(.*)\/([^\/]+)$/)
{
$dir = $1;
$fname = $2;
}
else
{
$dir = "";
$fname = $file->{path};
}
print "This is the DIRECTORY: $dir\n";
print "This is the FILE: $fname\n";
print "This is the FILE SIZE: $file->{size}\n";
}
感谢你的帮助。 – cjd143SD