perl中用XML::Simple模块写xml文件时,怎么确定属性的顺序?

如下xml文件,我希望它是这样的:<cce><anoncountry="england"capital="london"/><anoncountry="norway"ca... 如下xml文件,我希望它是这样的:
<cce> <anon country="england" capital="london" /> <anon country="norway" capital="oslo" /> <anon country="india" capital="new delhi" /></cce>
但它输出的却是:
<cce> <anon capital="london" country="england" /> <anon capital="oslo" country="norway" /> <anon capital="new delhi" country="india" /></cce>
求高人解答!
展开
 我来答
匿名用户
推荐于2016-02-19
展开全部

很简单,你把希望打印的文本存到文件里,比如test.xml,然后用XML::Simple打开它,然后用Data::Dumper把数据dump出来打印到屏幕上。

use strict;
use warnings;
use XML::Simple;
use Data::Dumper;
my $xml = new XML::Simple;
my $test = "test.xml";
open(IN, "< $test") or die("Error: could not open ");
my $data = $xml->XMLin($test);
close(IN);
print(Dumper($data));

你给出的文档Dumper输出是

$VAR1 = [
          {
            'country' => 'england',
            'capital' => 'london'
          },
          {
            'capital' => 'oslo',
            'country' => 'norway'
          },
          {
            'capital' => 'new delhi',
            'country' => 'india'
          }
        ];


看了"自由de王国"的评论我发现我原来理解错了,搜索了一下从stackoverflow上抄了一个自定义排序方案:


package MyXMLSimple;        
use base 'XML::Simple'; # 从XML::Simple派生自己的类
use strict;
use warnings;
use XML::Simple;
use Data::Dumper;

# 重定义XML::Simple的排序函数
sub sorted_keys
{
   my ($self, $name, $hashref) = @_;
   if ($name eq 'anon')   # 当key值是anon时
   {
      return ('country', 'capital'); # 返回子key的次序
   }
   return $self->SUPER::sorted_keys($name, $hashref); # 其它的key由基类处理
}

my $xml = new MyXMLSimple;
my $VAR1 = [
          {
            'country' => 'england',
            'capital' => 'london'
          },
          {
            'capital' => 'oslo',
            'country' => 'norway'
          },
          {
            'capital' => 'new delhi',
            'country' => 'india'
          }
        ];

my $data = $xml->XMLout($VAR1, RootName => 'cce');
open(OUT, "> myxml.xml");
print(OUT $data);
close(OUT);


myxml.xml的内容:

<cce>
  <anon country="england" capital="london" />
  <anon country="norway" capital="oslo" />
  <anon country="india" capital="new delhi" />
</cce>
melanie3572
2014-01-16
知道答主
回答量:19
采纳率:100%
帮助的人:5.5万
展开全部
如果一定要按照你的顺序打得话就一个一个的打印,不要把所有的数据存到一个变量里再打印,因为这样打印出来的顺序是按照字母顺序排列的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-01-14
展开全部
好久不用这个了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Tarly21
2014-01-17
知道答主
回答量:34
采纳率:0%
帮助的人:7.2万
展开全部
利用dumper
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式