我正在使用 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”结构被插入到一个数组中,那么它们的顺序是否总是与它们在输入文件中的顺序相同?
最佳答案
它不是保证是有序的,从某种意义上说,它没有在 POD 或我见过的 XML::Simple 常见问题解答中的任何地方记录。
但是,由于重新排列数组的顺序总是比保留它对开发人员和计算机来说都是更多的工作 - 您可以合理地假设更改顺序的可能性很小。
确定的唯一方法是:
查看 XML::Simple 的源代码并确保它以这种方式工作。就“XMLin”=>数据结构顺序维护而言,这可能有点棘手,因为这可能取决于 XML::Simple(可配置)在下面使用哪个解析器;我对 XML::Simple 代码的了解还不够,无法确保数组填充与解析器无关。
但按照我上面的逻辑,重新排列顺序比不重新排列更难。
说服维护者使其成为通过 POD 签约的已声明功能,并添加单元测试以确保这一点。
关于xml - XML::Simple 在使用数组时是否保持顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3857295/