2

' を含む 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>

そしてパール:

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">'&lt;>"&amp;</P>
  <P A="A" B="B" C="C">'&lt;>"&amp;</P>
</System>
4

1 に答える 1

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 のコメントに応じて改善されました。

于 2013-07-09T13:09:50.897 に答える