如何在Perl的XML :: Simple中禁用子标签排序?

joe*_*joe 1 xml perl xml-simple

我只想找到在XML :: Simple中禁用排序操作的方法

例如:

#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;

my %my_xml = (
    NAME  => [ 'test' ],
    EMAIL => [ 'test@example.com' ],
    ID    => 12,
);

my $xs = XML::Simple->new;
print $xs->XMLout(\%my_xml, RootName => "datas", NoSort => 1);

__END__
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

<datas ID="12">
  <EMAIL>test@example.com</EMAIL>
  <NAME>test</NAME>
</datas>
Run Code Online (Sandbox Code Playgroud)

但我希望输出为:

<datas ID="12">
  <NAME>test</NAME>
  <EMAIL>test@example.com</EMAIL>
</datas>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

mir*_*rod 5

看来Tie :: IxHash可以帮到你.

在我的测试中,在下面的代码中反转哈希中的电子邮件和名称行会导致它们在输出中被反转.我不确定更复杂的数据结构是否会出现这种情况,具体取决于XML :: Simple是重用原始哈希还是复制它.

#!/usr/bin/perl

use strict;
use warnings;

use Tie::IxHash;
use XML::Simple;

my( $id, $name, $email)= ( 'i1', 'John Doe', 'jdoe@example.com');

my %my_xml;
tie %my_xml, 'Tie::IxHash';
%my_xml = (
            'EMAIL' => [$email],                   
            'NAME' => [$name],
             'ID'  => $id,
          );

my $xs = XML::Simple->new();
my $xml_ref = \%my_xml ;
my $xml = $xs->XMLout($xml_ref, RootName=> "datas" ,NoSort => 1);

print $xml;
Run Code Online (Sandbox Code Playgroud)