2013-07-04 2 views
1

Я не могу понять, как проверить, если узел содержит значение с XML :: Simple модуль в Perl ... Вот мой код:XML :: Простая проверка, если узел содержит значение

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 пуст, но как я могу проверить это в коде ??

Спасибо заранее

ответ

2

ввода пробы был бы полезен.

Когда это «пустой», это ссылка на пустой хеш, так:

if (ref $property->{'boiler'} && eval { keys %{ $property->{'boiler'} } == 0 }) { 
    print "empty"; 
} 

Или вы можете установить XML :: Simple-х SuppressEmpty вариант 1 (пропускать пустые узлы в целом) или undef или '' (чтобы пустые узлы получили это значение вместо ссылки по умолчанию на пустой хэш). Как говорится в документации, «последние две альтернативы немного легче проверить в вашем коде, чем хеш без ключей». (Но учтите, что это повлияет на всех узлов, а не только узлов котла, а также влияет на генерацию XML, если вы это делаете.)

0
print Dumper($property->{'boiler'}) if $property->{'boiler'} != 0 ; 
+0

Не помогает ... – nKognito

+0

Извините, я отредактировал ответ, надеюсь, что теперь это помогает – jipipayo

+1

'if $ property -> {'boiler'} == 0', чтобы проверить, не пуст)) Спасибо! – nKognito

Смежные вопросы