У меня есть XML, который мне нужно преобразовать в ха sh в указанном формате c, который требует, чтобы некоторые узлы были в массиве. Я пробовал XML :: Simple, но не могу избавиться от одного xml уровня узла.
#!/usr/bin/perl
use Data::Dumper::Simple;
use XML::Simple;
use warnings;
use strict;
my $xml = <<'XML';
<?xml version="1.0"?>
<release id="9999" status="Accepted">
<images>
<image height="511" type="primary" uri="" uri150="" width="600"/>
<image height="519" type="secondary" uri="" uri150="" width="600"/>
<image height="521" type="secondary" uri="" uri150="" width="600"/>
<image height="217" type="secondary" uri="" uri150="" width="500"/>
<image height="597" type="secondary" uri="" uri150="" width="600"/>
<image height="89" type="secondary" uri="" uri150="" width="600"/>
</images>
<artists>
<artist>
<id>45</id>
<name>Aphex Twin</name>
<anv/>
<join/>
<role/>
<tracks/>
</artist>
</artists>
</release>
XML
my $xml_hash = XMLin($xml, ForceArray => qr{image}x );
print Dumper $xml_hash;
Желаемый вывод
'images' => [
{
'type' => 'primary',
'width' => 600,
'resource_url' => '',
'uri150' => '',
'height' => 511,
'uri' => ''
},
{
'width' => 600,
'type' => 'secondary',
'resource_url' => '',
'uri150' => '',
'uri' => '',
'height' => 519
}, etc...
Что я получаю с моим примером кода:
$xml_hash = {
'images' => [
{
'image' => [
{
'uri150' => '',
'type' => 'primary',
'uri' => '',
'height' => '511',
'width' => '600'
},
{
'type' => 'secondary',
'uri150' => '',
'uri' => '',
'height' => '519',
'width' => '600'
},
{
'uri' => '',
'height' => '521',
'width' => '600',
'type' => 'secondary',
'uri150' => ''
},
etc...
Как мне избавиться от
'image' => [
и иметь
'images' => [
содержать все хэши?
Спасибо; George