XML ::裸力数组

时间:2018-08-08 16:27:28

标签: xml perl

我正在尝试解析以下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引用

那是为什么?

1 个答案:

答案 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});