我无法弄清楚如何在Perl中检查节点是否包含XML :: Simple模块的值... 这是我的代码:
my $parser = XML::Simple->new;
my $url = 'http://some/xml.aspx';
my $content = get $url or die "Unable to get $url\n";
my $data = $parser->XMLin($content);
print "Content-Type: text/html; charset=utf-8\n\n";
foreach my $property (@{$data->{propertyList}}) {
if ($property->{'boiler'}) {
print Dumper($property->{'boiler'});
}
}
某些Boiler
个节点可能为空,输出如下:
$VAR1 = "\x{5e9}\x{5de}\x{5e9}";
$VAR1 = "\x{5e9}\x{5de}\x{5e9}";
$VAR1 = "\x{5e9}\x{5de}\x{5e9}";
$VAR1 = {};
$VAR1 = "\x{5e9}\x{5de}\x{5e9}";
$VAR1 = {};
$VAR1 = "\x{5e9}\x{5de}\x{5e9}";
$VAR1 = "\x{5e9}\x{5de}\x{5e9}";
$VAR1 = "\x{5e9}\x{5de}\x{5e9}";
$VAR1 = "\x{5e9}\x{5de}\x{5e9}";
$VAR1 = {};
$VAR1 = "\x{5e9}\x{5de}\x{5e9}";
$VAR1 = {};
$VAR1 = "\x{5e9}\x{5de}\x{5e9}";
第四个$VAR1
是空的,但我怎么能在代码中检查它?
提前谢谢
答案 0 :(得分:2)
示例输入很有用。
如果它是"空",它是对空哈希的引用,所以:
if ( ref $property->{'boiler'} && eval { keys %{ $property->{'boiler'} } == 0 } ) {
print "empty";
}
或者您可以将XML :: Simple SuppressEmpty选项设置为1(完全跳过空节点)或者设置为undef或'' (让空节点获取该值而不是空哈希的默认引用)。正如文档所说,"后两种选择在代码中比在没有键和#34;的哈希中更容易测试。 (但请注意,这会影响所有节点,而不仅仅是Boiler节点,如果您这样做,也会对XML生成产生影响。)
答案 1 :(得分:0)
print Dumper($property->{'boiler'}) if $property->{'boiler'} != 0 ;