我希望XML :: Twig能够准确打印解析的内容

Jam*_*ieC 2 xml perl xml-twig

我有包含'的XML.对于'等等.当我使用XML :: Twig解析它然后再次打印出来时,所有的' 打印为'.此外,XML :: Twig似乎重新排序属性以按字母顺序排列.从XML的角度来看,这些是等价的,但是,我想对XML进行一小组更改并使用diff来确认所做的唯一更改是我想要的.有没有办法让XML :: Twig除了我明确改变之外什么都不改变?

这是我的XML:

<?xml version="1.0" encoding="utf-8"?>
<System>
  <P C="C" B="B" A="A">&apos;&lt;&gt;&quot;&amp;</P>
  <P A="A" B="B" C="C">'&lt;>"&amp;</P>
</System>
Run Code Online (Sandbox Code Playgroud)

和perl:

my $twig = new XML::Twig(KeepSpaces => 'true');
$twig->parsefile("test.xml");
$twig->print();
Run Code Online (Sandbox Code Playgroud)

以下是打印的内容:

<?xml version="1.0" encoding="utf-8"?>
<System>
  <P A="A" B="B" C="C">'&lt;>"&amp;</P>
  <P A="A" B="B" C="C">'&lt;>"&amp;</P>
</System>
Run Code Online (Sandbox Code Playgroud)

inn*_*naM 7

看起来这个keep_encoding选项可以解决问题:

use strict;
use warnings;
use XML::Twig;

my $twig = XML::Twig->new( 
                    keep_spaces     => 1, 
                    keep_encoding   => 1, 
                    keep_atts_order => 1,
);
$twig->parsefile('test.xml');
$twig->print;
Run Code Online (Sandbox Code Playgroud)

更新:改进以响应mirod的评论.