Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML::简单检查节点是否包含值_Xml_Perl_Xml Simple - Fatal编程技术网

XML::简单检查节点是否包含值

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

我不知道如何用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
为空,但如何在代码中签入它


提前感谢

示例输入将非常有用

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,如果启用了警告,则会出现警告)。