Я выборочно исправляю некоторые элементы и атрибуты. К сожалению, наши входные файлы содержат как одно-, так и двойные кавычки. Кроме того, некоторые значения атрибутов содержат кавычки (внутри значения).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');
Тогда мы увидели бы недопустимый XML для Метка2 :
<label2 attr='This 'works'!' />
Есть ли возможность сохранить существующие кавычки? Или есть лучший подход для выборочной фиксации веток?
Обновите версию '' XML :: Twig' от версии 3.37 до версии CPAN (3.44). Если вы все еще видите эту проблему, сообщите об этом как ошибку в CPAN. – toolic
Проблема все еще существует в 3.44. В качестве обходного пути я добавил дополнительный twig_handler, чтобы изменить все двойные кавычки внутри значений атрибутов на одинарные кавычки: '' * '=> sub {my ($ t, $ elt) = @ _; foreach (ключи% {$ elt-> atts}) {$ {$ elt-> atts} {$ _} = ~ s/\ "/ \ '/ g;}},' – ALF