You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XML::Twig将XML属性调整为指定非字母顺序?

如何用XML::Twig按指定非字母顺序调整XML属性

我了解XML本身不关心属性顺序,但我使用的一款闭源应用对此有要求,同时这样也便于用git追踪XML变更。我尝试过用XML::Twig的keep_atts_order和twig_handlers选项调整属性顺序,但未生效。目前我在Twig处理XML后用正则表达式解决该问题,但更希望让Twig在内部完成调整。

我的尝试代码如下:

use Tie::IxHash;
use XML::Twig;

sub setorder {
  my $item = $_[0];

  # Copy hashes, then delete.
  my %attrs = %{$item->atts};
  $item->del_atts;

  for my $i ( 1 .. (scalar @_ - 1) ) {
    my $att = $_[$i];
    if (exists($attrs{$att})) {
      $item->set_att($att, $attrs{$att});
      delete($attrs{$att});
    }
  }
}

my $twig = XML::Twig -> new(
  keep_atts_order => 1,
  twig_handlers => { template => sub { setorder($_, 'id', 'name', 'comp') }, },
);

my $xmldata = <<'XML';
<?xml version="1.0" encoding="UTF-8"?>
<thing>
<template name="Op" id="x1" comp="Saga">
</template>
</thing>
XML

$twig->parse ( $xmldata );

my $root = $twig->root;
print $root->print() . "
";

我找到的唯一类似问题仅解决了让Twig按字母排序属性的需求,而我需要的是非字母的指定顺序。

内容的提问来源于stack exchange,提问作者James Risner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:33:22