XML :: Simpleに入り、1つのレコードを解析するときにXML::Simpleモジュールがチョークする問題が発生しました。Perlコードは以下のとおりです.....
#!/usr/bin/perl
# use module
use warnings;
use strict;
use XML::Simple;
use Data::Dumper;
# create object
my $xml = new XML::Simple;
# read XML file
my $data = $xml->XMLin("owners.xml");
foreach my $e (@{$data->{Owner}})
{
print $e->{OwnerId}->{OwnerCik}."\n";
print $e->{OwnerId}->{OwnerName}."\n";
print "\n";
}
このXMLを使用すると、美しく機能します...
<?xml version="1.0"?>
<ownershipDocument>
<Owner>
<OwnerId>
<OwnerCik>0001234878</OwnerCik>
<OwnerName>PUBLIC JOHN Q</OwnerName>
</OwnerId>
</Owner>
<Owner>
<OwnerId>
<OwnerCik>0001234877</OwnerCik>
<OwnerName>PUBLIC JANE Q</OwnerName>
</OwnerId>
</Owner>
</ownershipDocument>
問題が発生するのは1つのレコードがある場合です...以下のXMLは例です...
<?xml version="1.0"?>
<ownershipDocument>
<Owner>
<OwnerId>
<OwnerCik>0001234878</OwnerCik>
<OwnerName>PUBLIC JOHN Q</OwnerName>
</OwnerId>
</Owner>
</ownershipDocument>
これを解析するときに発生するエラーは....です。
Not an ARRAY reference at ./so_parse.pl line 14.
解決策はForceArrayを使用することだと思い、これをForceArrayを含むように変更しました。
my $data = $xml->XMLin("so_single.xml", ForceArray=>1);
今私は得る.....。
Not a HASH reference at ./so_parse.pl line 16.
確かに、私は複雑なデータ構造に少しぼんやりしていますが、私が解決しようとしているのは、所有者が1人しかない場合にこれらの所有者を解析する方法です。
どんな助けでも素晴らしいでしょう!ジャニー