Поддерживает ли XML :: Simple порядок при использовании массивов? - PullRequest
3 голосов
/ 04 октября 2010

Я использую XML :: Simple для анализа XML-файла, который я затем хочу использовать для записи выходного файла в очень специфическом формате. Таким образом, порядок вывода важен.
Как я понимаю, когда XML преобразуется в хеш-адрес perl, порядок теряется (потому что у хэшей perl нет порядка) Но как насчет того, когда массив используется XML :: Simple.

Например:

<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
  <cd>
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <price>10.0</price>
  </cd>
  <cd>
    <title>Greatest Hits</title>
    <artist>Dolly Parton</artist>
    <price>9.99</price>
  </cd>
  <cd>
    <title>Hello</title>
    <artist>Say Hello</artist>
    <price>0001</price>
  </cd>
</catalog>

дает нам структуру данных, напоминающую:

$VAR1 = {
      'cd' => [
              {
                'artist' => 'Bonnie Tyler',
                'price' => '10.0',
                'title' => 'Hide your heart'
              },
              {
                'artist' => 'Dolly Parton',
                'price' => '9.99',
                'title' => 'Greatest Hits'
              },
              {
                'artist' => 'Say Hello',
                'price' => '0001',
                'title' => 'Hello'
              }
            ]
    };

3 структуры 'cd' вставляются в массив, поэтому их порядок всегда будет таким же, как во входном файле?

Ответы [ 2 ]

1 голос
/ 04 октября 2010

Это не гарантировано , чтобы быть в порядке, в некотором смысле это не задокументировано нигде в POD или FAQ для XML :: Simple, который я когда-либо видел.- упорядочение порядка массива всегда больше работы - как для разработчика, так и для компьютера - чем его сохранение - вы можете разумно предположить, что изменение порядка будет ОЧЕНЬ маловероятным.

ЕДИНСТВЕННЫЙ способ убедиться в этом:

  1. Посмотрите на исходный код XML :: Simple и убедитесь, что он работает таким образом.Это может быть немного сложнее, поскольку "XMLin" => поддержание порядка структуры данных, так как это может зависеть от того, какой синтаксический анализатор используется XML :: Simple (это настраивается);Я не знаю достаточно о коде XML :: Simple, чтобы быть уверенным, что заполнение массива не зависит от синтаксического анализатора.

    Но, согласно моей логике выше, было бы сложнее изменить порядок, чем не изменять его.

  2. Убедить сопровождающего сделать его объявленной функцией,контракт через POD и добавить модульный тест, чтобы убедиться, что.

0 голосов
/ 04 октября 2010

На входе да.Использование массивов будет держать их в порядке.Я не нашел способа упорядочить вывод во многих случаях, используя XML :: Simple.

...