Использование xml::simple - невозможно получить вывод определенного формата

Входной файл: SN.xml

<?xml version='1.0'?>
<root>
<category cname='Cname1' id='c1'>
  <subcat key='3' sname='Subname1' sid='sid1'>
    <prod key='1' pname='Productname'>value1</prod>
  </subcat>
</category>
</root>

Я использую этот код для преобразования файла XML в хэш.

my $config = XML::Simple->new();
$config = XMLin('SN.xml');
print Dumper($config);

Я получаю ниже вывода:

'3' => {
          'sid' => 'sid1',
              'sname' => 'Subname1',
                   'prod' => {
                               'content' => 'value1',
                               'pname' => 'Productname',
                               'key' => '1'
                                                   }
        },

Я ожидаю получить вывод ниже, пожалуйста, помогите мне получить это.

  '3' => {
             'sid' => 'sid1',
                     'sname' => 'Subname1',
                                       'prod' => {
                                                 '1' => {
                                                        'pname' => 'Productname',
                                                        'content' =>'value1'
                                                      },
                                                 }
             },

Пожалуйста, предложите мне любой другой модуль, производящий этот результат.

Заранее спасибо!


person Vasanth    schedule 15.11.2013    source источник
comment
Ваш XML недействителен! Может, это опечатка? В строке №4 вы закрываете тег </subcat>, который никогда не открывался.   -  person psxls    schedule 15.11.2013
comment
Спасибо psls! Это не ошибка, я исправил. Я хочу вывести формат, о котором я упоминал выше.   -  person Vasanth    schedule 15.11.2013
comment
Строка my $config = XML::Simple->new(); здесь бесполезна. Вы вообще не используете созданный объект XML::Simple.   -  person Slaven Rezic    schedule 15.11.2013


Ответы (1)


my $xs = XML::Simple->new( ForceArray => 1 );
my $config = $xs->XMLin('SN.xml');
print Dumper $config;

Параметр ForceArray заставит вложенные элементы помещаться в массив ссылок, даже если есть только один вложенный элемент. Это позволяет включить параметр KeyAttr по умолчанию и распознать ваши «ключевые» атрибуты.

person stevenl    schedule 15.11.2013