perl脚本 - 从xml文件中读取许多值

时间:2010-12-16 11:08:15

标签: perl

如何使用perl脚本从XML文件中读取多个值? 我有像xml文件:

<Provisioning>
<Appliance>
        <ID>1</ID>
        <SiteID></SiteID>
        <IPAddress>10.52.32.230</IPAddress>
</Appliance>
<Appliance>
        <ID>1</ID>
        <SiteID></SiteID>
        <IPAddress>10.52.32.530</IPAddress>
</Appliance>
<Appliance>
        <ID>1</ID>
        <SiteID></SiteID>
        <IPAddress>10.52.32.730</IPAddress>
</Appliance>...
</Provisioning>

我编写的代码如下:

use XML::Simple;
use Data::Dumper;
my $xml = new XML::Simple;
my $peermas = $xml->XMLin($masapplications);
print "file contents: $peermas \n";
print Dumper($peermas);
@masipaddr =+ $peermas->{Appliance}->{IPAddress};      #{Provisioning}->{Appliance}->{IPAddress};
print "The MAS ip: @masipaddr \n";

我是perl脚本的新手,我的代码只能读取一个IP地址,而不是剩余的2个。 那么在这种情况下该怎么办?请尽快回复...... 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您已在$peermas中获得所需的所有信息。但是,如果您需要IP地址阵列,您可以使用:

my @massipaddr = map { $_->{IPAddress} } @{ $peermas->{Appliance} };

此映射在哈希$peermas->{Appliance}数组上进行迭代,并将每个IP地址从@massipaddr推送到其中。

答案 1 :(得分:0)

或许这样的事情:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;

my $xml = join '', <DATA>;

my $peermas = XMLin($xml);

foreach (@{$peermas->{Appliance}}) {
  print $_->{IPAddress}. "\n";
}

__DATA__
<Provisioning>
<Appliance>
        <ID>1</ID>
        <SiteID></SiteID>
        <IPAddress>10.52.32.230</IPAddress>
</Appliance>
<Appliance>
        <ID>1</ID>
        <SiteID></SiteID>
        <IPAddress>10.52.32.530</IPAddress>
</Appliance>
<Appliance>
        <ID>1</ID>
        <SiteID></SiteID>
        <IPAddress>10.52.32.730</IPAddress>
</Appliance>...
</Provisioning>