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 的常见问题解答中。

但是,由于重新排列数组的顺序总是比保留它更费力——无论是对开发人员还是计算机而言——你可以合理地假设更改顺序是非常不可能的。

唯一可以确定的方法是:

  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 回答