1

ノードに XML::Simple モジュールの Perl で値が含まれているかどうかを確認する方法がわかりません...ここに私のコードがあります:

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}";

4番目$VAR1は空ですが、コードで確認するにはどうすればよいですか??

前もって感謝します

4

2 に答える 2

2

サンプル入力は役に立ちました。

「空」の場合、空のハッシュへの参照であるため、次のようになります。

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

または、XML::Simple のSuppressEmptyオプションを 1 (空のノードを完全にスキップする) または undef または '' (空のノードが空のハッシュへのデフォルト参照の代わりにその値を取得するようにする) に設定できます。ドキュメントにあるように、「後者の 2 つの選択肢は、キーのないハッシュよりもコードでテストするのが少し簡単です」。(ただし、これはBoiler ノードだけでなくすべてのノードに影響し、そうしている場合は XML 生成にも影響することに注意してください。)

于 2013-07-04T19:21:47.577 に答える
0
print Dumper($property->{'boiler'}) if $property->{'boiler'} != 0 ;
于 2013-07-04T19:16:26.223 に答える