如何使用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
相关产品推荐
相关产品推荐

