我正在尝试解析以下XML数据
XML::Bare
<xml>
<a>
<b>1</b>
<b>2</b>
<c>
<b>3</b>
</c>
</a>
<a>
<b>4</b>
<c>
<b>5</b>
<b>6</b>
</c>
<c>
<b>7</b>
</c>
</a>
</xml>
具有以下代码:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Bare qw( forcearray );
my $ob = new XML::Bare( file => "tst.xml" );
my $root = $ob->parse();
forcearray($root->{xml}->{a});
my @as = @{ $root->{xml}->{a} }
foreach ( @as ) {
print $ob->xml($_);
forcearray($_->{b});
print scalar @{ $_->{b} }, " bs\n";
forcearray($_->{c});
print scalar @{ $_->{c} }, " cs\n";
}
最后一次打印失败,
在./tst_xml.pl第16行处不是ARRAY引用
那是为什么?
答案 0 :(得分:3)
sub forcearray {
my $ref = shift;
return [] if( !$ref );
return $ref if( ref( $ref ) eq 'ARRAY' );
return [ $ref ];
}
XML::Bare::forcearray
函数始终返回数组引用,但不会修改其输入。因此,您需要使用forcearray
的返回值。
$_->{b} = forcearray($_->{b});
$_->{c} = forcearray($_->{c});