我選擇性地修復了一些元素和屬性。不幸的是,我們的輸入文件包含單引號和雙引號屬性值。另外,一些屬性值包含引號(在一個值內)。Perl XML :: Twig - 在屬性中和附近保留引號
使用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) [email protected]_;
# ...
}
上面的代碼返回無效的XML爲LABEL1:
<label1 attr="This "works"!" />
如果我添加:
$twig->set_quote('single');
然後我們會看到LABEL2無效的XML :
<label2 attr='This 'works'!' />
是否有保留現有報價的選項?或者有更好的方法選擇性固定小枝?
將你的'XML :: Twig'版本從3.37更新到最新的CPAN(3.44)。如果您仍然看到此問題,請將其報告爲CPAN上的錯誤。 – toolic
問題在3.44中依然存在。作爲一種解決方法,我添加了一個額外的twig_handler來將屬性值中的所有雙引號更改爲單引號:''*'=> sub {my($ t,$ elt)= @ _; foreach(keys%{$ elt-> atts}){$ {$ elt-> atts} {$ _} =〜s/\「/ \'/ g;}},' – ALF