perl - 如何让空值成为空值而不是散列?

标签 perl

我无法从我的 XML 文件中获取中间名的值。

这是我的 XML 文件:

<PERSON>
<ID>1</ID>
<FIRSTNAME>JOHN</FIRSTNAME>
<MIDDLENAME></MIDDLENAME>
<LASTNAME>SMITH</LASTNAME>
</PERSON>

这是我访问 XML 文件的方式:

// [...]
use XML::Simple;

my $file = shift;

open FILE,"$file" or die $!;
my @rawFile = <FILE>;
close (FILE);

my $xml = new XML::Simple;

my $data = $xml->XMLin("@rawFile");

my $place = "PERSON"
my $field = "MIDDLENAME"
my $value = $data->{$place}->{$self->{field}};

if (defined $value)
{
     print "Value is $value"
     print Dumper($data->{$place}); 
}

这是输出:

Value is [HASH(0x8ed6e28)]
$VAR1 = {
    'ID' => '1',
    'FIRSTNAME' => 'JOHN',
    'MIDDLENAME' => {},
    'LASTNAME' => 'SMITH',
    'PHONE' => '5551234'
}

如何访问我的中间名 $value 以便它返回 ""(空字符串)而不是 [HASH(0x8ed6e28)]

请注意,如果 $field="FIRSTNAME",则 "John" 的正确值将在 $value 中返回。

最佳答案

XML::Simple 是最难使用的 XML 解析器。 ForceContent => 1 可以解决问题,尽管它会稍微改变您的结构。

就个人而言,我使用 XML::LibXML。

my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($qfn);

my %person;
for my $node ($doc->findnodes('/PERSON/*')) {
   $person{ $node->nodeName() } = $node->textContent();
}

关于perl - 如何让空值成为空值而不是散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20668376/

相关文章:

c++ - 使用(python,perl)(linux)在excel中创建图表

perl - 在 Mac Sierra 上使用 mysql brew install 安装 perl DBD::mysql 失败

perl - 如何找出安装了哪个版本的mod_perl?

mysql - Perl、DBI 和 MySQL 定界符

mysql - 使用perl将特殊字符插入mysql

perl - 将文件直接下载到 FTP 服务器

perl - 在 Mojolicious 中,我如何显示我的 session 数据?

perl - DBD::SQLite:插入或更新 - 问题

Perl 连接运算符与追加运算符

python - 每2000个字符提取字符并保存文件