我无法从我的 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/