我有包含&的XML。 for,等等。当我使用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">'<>"&</P>
<P A="A" B="B" C="C">'<>"&</P>
</System>
和perl:
my $twig = new XML::Twig(KeepSpaces => 'true');
$twig->parsefile("test.xml");
$twig->print();
以下是打印的内容:
<?xml version="1.0" encoding="utf-8"?>
<System>
<P A="A" B="B" C="C">'<>"&</P>
<P A="A" B="B" C="C">'<>"&</P>
</System>
答案 0 :(得分: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;
更新:改进以回应mirod的评论。