XML::简单检查节点是否包含值
我不知道如何用Perl中的XML::Simple模块检查节点是否包含值。。。 以下是我的代码:XML::简单检查节点是否包含值,xml,perl,xml-simple,Xml,Perl,Xml Simple,我不知道如何用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
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
为空,但如何在代码中签入它
提前感谢示例输入将非常有用
print Dumper($property->{'boiler'}) if $property->{'boiler'} != 0 ;
当它为“空”时,它是对空哈希的引用,因此:
if ( ref $property->{'boiler'} && eval { keys %{ $property->{'boiler'} } == 0 } ) {
print "empty";
}
或者您可以将XML::Simple的选项设置为1(完全跳过空节点),或设置为undef或“”(使空节点获得该值,而不是对空哈希的默认引用)。正如文档所说,“后两种方法在代码中比没有键的散列更容易测试”。(但请注意,这将影响所有节点,不仅仅是锅炉节点,如果您这样做,还将影响XML生成。)
如果$property->{'Boiler'}==0检查是否为空)谢谢!不,那是完全错误的。它测试数值是否为0(在示例中,所有“非空”字符串恰好为0,如果启用了警告,则会出现警告)。