我无法从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
的正确值。
答案 0 :(得分:4)
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();
}
答案 1 :(得分:2)
XML :: Simple是最容易使用的解析器之一。 ; D Adron提到SuppressEmpty控制着如何处理值。
#!/usr/bin/perl
use XML::Simple;
use Data::Dumper;
my $raw_file;
while(<>)
{
$raw_file .= $_;
}
print Dumper( XMLin( $raw_file, SuppressEmpty => '' ) );
exit;
此代码段产生以下输出:
$VAR1 = {
'ID' => '1',
'MIDDLENAME' => '',
'LASTNAME' => 'SMITH',
'FIRSTNAME' => 'JOHN'
};