2010-12-16 97 views
2

如何讀取XML文件中使用Perl腳本的多個值多個值? 我有這樣的XML文件:的perl腳本 - 來讀取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 。 那麼在這種情況下我應該怎麼做?請儘快回覆... 提前致謝。

+0

使用XML ::簡單不指定任何選項通常會導致疼痛的路線。有關更多詳細信息,請參閱「嚴格模式」中的這篇文章:http://www.perlmonks.org/index.pl?node_id=218480 – 2010-12-16 20:07:04

回答

1

你已經擁有你在$peermas需要的所有信息。但是,如果你需要你的IP地址數組你可以使用:

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

這張地圖迭代的散列$peermas->{Appliance}的陣列,並從中推每個ip地址爲@massipaddr

+0

嘿男人......非常感謝.. :) – SK1 2010-12-16 11:40:32

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>