Ниже приведено простое решение с использованием XML :: Twig.По сравнению с опцией XML :: Simple он работает независимо от того, где элементы Link
находятся в XML, и будет учитывать исходное форматирование файла.Это также будет работать, если XML содержит смешанное содержимое.
Если вам нужно изменить файл на месте, вы можете использовать parsefile_inplace
вместо parsefile
, и я подозреваю, что регулярное выражение в subs_text
может потребоваться улучшение в реальной жизни, но этот код должен стать хорошей отправной точкой.
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
XML::Twig->new( twig_roots => { Link => \&replace_link, }, # process Link
twig_print_outside_roots => 1, # output everything else
)
->parsefile( 'my.xml');
sub replace_link
{ my( $t, $link)= @_;
$link->subs_text( qr{^http://example\.com/$}, 'http://mysite.com');
$t->flush; # or $link->print, outputs the modified (or not) link
}