XML::Simple - Как исправить, что одна и та же структура xml приводит к 2 различным структурам данных Perl, в зависимости от количества членов / объединений?
Я новичок в XML::Simple (а также не очень увлекаюсь XML). Я хочу использовать его для анализа простой структуры XML, которую я получаю в результате API. Я не имею никакого влияния на XML, который я получаю.
Когда возвращаемый список xml содержит только один элемент, у меня полностью другая структура данных perl, как тогда, когда в списке больше элементов. Это очень раздражает.
Я хотел бы иметь структуру данных, как в примере 2, даже если результат содержит только один элемент.
Что мне нужно сделать, чтобы получить идентичный вывод?
Пример 1:
#!/usr/bin/perl -w
use strict;
use warnings;
use Data::Dumper;
use XML::Simple;
my $xml1 = new XML::Simple;
my $data1 = $xml1->XMLin( '
<aaa>
<bbb>
<id>1</id>
<text>Test 1</text>
</bbb>
</aaa>
' );
print Dumper($data1);
Результат 1:
$VAR1 = {
'bbb' => {
'text' => 'Test 1',
'id' => '1'
}
};
Пример 2:
my $xml2 = new XML::Simple;
my $data2 = $xml2->XMLin( '
<aaa>
<bbb>
<id>1</id>
<text>Test 1</text>
</bbb>
<bbb>
<id>2</id>
<text>Test 2</text>
</bbb>
</aaa>
' );
print Dumper($data2);
Результат 2:
$VAR1 = {
'bbb' => {
'1' => {
'text' => 'Test 1'
},
'2' => {
'text' => 'Test 2'
}
}
};
TNX за вашу помощь.
Ура, Роберт
1 ответ
Попробуйте сделать это:
#!/usr/bin/perl -w
use strict;
use warnings;
use Data::Dumper;
use XML::Simple;
my $xml1 = new XML::Simple;
my $data1 = $xml1->XMLin( '
<aaa>
<bbb>
<id>1</id>
<text>Test 1</text>
</bbb>
</aaa>
',
ForceArray=>['bbb']
);
print Dumper($data1);
ForceArray => 1 # in - важно
Эта опция должна быть установлена в "1", чтобы вложенные элементы были представлены как массивы, даже если есть только один.Этот параметр особенно полезен, если структура данных, вероятно, будет записана обратно в виде XML, а поведение по умолчанию при объединении отдельных вложенных элементов в атрибуты нежелательно.