いくつかの要素と属性を選択的に修正しています。残念ながら、入力ファイルには、一重引用符と二重引用符の両方の属性値が含まれています。また、一部の属性値には (値内に) 引用符が含まれています。
XML::Twig を使用すると、属性値の周りに存在する引用符を保持する方法がわかりません。
サンプルコードは次のとおりです。
use strict;
use XML::Twig;
my $file=qq(<file>
<label1 attr='This "works"!' />
<label2 attr="This 'works'!" />
</file>
);
my $fixes=0; # count fixes
my $twig = XML::Twig->new( twig_handlers => {
'[@attr]' => sub {fix_att(@_,\$fixes);} },
# ...
keep_atts_order => 1,
keep_spaces => 1,
keep_encoding => 1, );
#$twig->set_quote('single');
$twig->parse($file);
print $twig->sprint();
sub fix_att {
my ($t,$elt,$fixes) =@_;
# ...
}
上記のコードは、label1 に対して無効な XML を返します。
<label1 attr="This "works"!" />
私が追加した場合:
$twig->set_quote('single');
次に、label2 の無効な XML が表示されます。
<label2 attr='This 'works'!' />
既存の見積もりを保持するオプションはありますか? または、小枝を選択的に固定するためのより良いアプローチはありますか?