4

いくつかの要素と属性を選択的に修正しています。残念ながら、入力ファイルには、一重引用符と二重引用符の両方の属性値が含まれています。また、一部の属性値には (値内に) 引用符が含まれています。

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'!' />

既存の見積もりを保持するオプションはありますか? または、小枝を選択的に固定するためのより良いアプローチはありますか?

4

1 に答える 1

2

を使用する特定の理由はありますkeep_encodingか? それがなければ、引用は適切にエンコードされます。

keep_encodingファイルの元のエンコーディングを保持するために使用されますが、これを行う方法は他にもあります。これは主に、エンコーディングが現在ほどスムーズに機能しなかった 5.8 より前の時代に使用されていました。

于 2013-06-07T04:51:22.150 に答える