我正在使用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'结构被插入到一个数组中,所以它们的顺序总是与它们在输入文件中的顺序相同吗?
答案 0 :(得分:1)
它不是保证有序,从某种意义上来说,它没有记录在POD或我见过的XML :: Simple的FAQ中。
然而,由于重新安排数组的顺序总是比开发人员和计算机更有效 - 而不是保留它 - 您可以合理地假设订单更改非常不可能。
唯一可行的方法是:
查看XML :: Simple的源代码并确保它以这种方式工作。就“XMLin”=&gt;数据结构顺序维护而言,这可能有点棘手,因为这可能取决于XML :: Simple(可配置)下使用哪个解析器;我不太了解XML :: Simple代码,以确保数组填充是独立于解析器的。
但按照我上面的逻辑,重新排列顺序比重新排列它更难。
说服维护者将其设为已通过POD签约的声明功能,并添加单元测试以确保该功能。
答案 1 :(得分:0)
输入时,是的。使用数组将使它们保持有序。在许多情况下,我还没有找到使用XML :: Simple保持输出顺序的方法。