【发布时间】:2019-10-22 16:01:18
【问题描述】:
我正在解析以下 XML 并从 XML 数据中获取 IP 地址。在访问 $region -> { 'IpRange' } 时,它在 ExtractXmlIps.pl 第 45 行作为 Not an ARRAY reference 抛出错误。有时 Region 不包含任何值。在这种情况下,我会收到此错误。当我添加像“if($region && $region -> {'IpRange'})”这样的检查时,它仍然抛出错误。
<?xml version="1.0" encoding="utf-8"?>
<IpAddresses xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Region Name="us" />
<Region Name="asia">
<IpRange Subnet="10.10.10.0/21" />
</Region>
</IpAddresses>
解析xml的代码:
getstore ( $urls[0], $file_path );
my $xml = new XML::Simple;
my $xml_data = $xml -> XMLin ( $file_path );
foreach my $region ( @{ $xml_data -> { 'Region' } } ) {
foreach my $ip ( @{ $region -> { 'IpRange' } } ) {
print $ip;
}
}
我为区域和区域内添加了空检查。试图找到数组的长度并添加了该检查。
【问题讨论】:
-
你能展示你在做什么吗?更多相关代码?我们不知道“ExtractXmlIps.pl”是什么样的,也不知道你如何“解析xml”,也不知道它是什么“error”投掷,也不是你的“null check”是什么。
-
Follwong 是 XML:
在上面的第一个循环中的 xml 中,我在第二个循环中获取区域,我正在获取 ips。某些区域不包含值,因此 @{ $region -> { 'IpRange' } } 抛出错误。 -
@KarthikS,请edit the question 添加缺少的代码和错误文本。我们需要能够运行代码才能重现问题。
-
XML::简单?嗯...这是一些旧的现有程序吗?从the documentation 的第一行开始:请不要在新代码中使用此模块。