gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:36:40 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com