3

XML::Simple を使用して XML ファイルを解析し、それを使用して非常に特殊な形式で出力ファイルを書きたいと考えています。したがって、出力順序は重要です。
私が理解しているように、XML が perl hashref に変換されると、順序が失われます (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' 構造体が配列に挿入されるため、それらの順序は常に入力ファイルと同じになりますか?

4

2 に答える 2

1

POD や私が今まで見た XML::Simple の FAQ のどこにも文書化されていないという意味で、順番通りであるとは限りません

ただし、配列の順序を再配置することは、開発者とコンピューターの両方にとって、それを維持するよりも常により多くの作業であるため、順序の変更は非常にまれであると合理的に推測できます。

確認する唯一の方法は次のとおりです。

  1. XML::Simple のソース コードを見て、このように動作することを確認してください。これは、"XMLin" => データ構造の順序の維持に関しては、少しトリッキーかもしれません。これは、XML::Simple (構成可能) によって使用されるパーサーに依存する可能性があるためです。XML::Simple のコードについて、配列の作成がパーサーに依存しないことを確認するのに十分な知識がありません。

    しかし、上記の私の論理によれば、順序を再配置するのは、再配置しないよりも難しいでしょう。

  2. メンテナーに、POD を介して契約される宣言された機能にするよう説得し、それを確認するための単体テストを追加します。

于 2010-10-04T17:37:15.010 に答える
0

入力時、はい。配列を使用すると、それらが順番に保持されます。多くの場合、XML::Simple を使用して出力の順序を維持する方法を見つけられませんでした。

于 2010-10-04T16:45:52.967 に答える