Это решение, включающее то, что я думаю, является разумным исправлением вашего вопроса. Нижеприведенный код основан на filtering example, приведенном в документации.
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
my $t = XML::Twig->new(
twig_roots => { SERVER => \&update },
twig_print_outside_roots => 1,
);
$t->parse(\*DATA);
sub update {
my ($t, $server) = @_;
if ('serv2' eq $server->att('HOSTNAME')) {
$server->insert(
CIFS_SERVICE => { NETBIOSNAME => 'serv2' },
);
}
$server->print;
}
__DATA__
<SOURCE_SERVER>
<SERVER HOSTNAME="serv1">
<CIFS_SERVICE NETBIOSNAME="serv1" />
</SERVER>
<SERVER HOSTNAME="serv2">
</SERVER>
</SOURCE_SERVER>
Выход:
C:\Temp> x
<SOURCE_SERVER>
<SERVER HOSTNAME="serv1"><CIFS_SERVICE NETBIOSNAME="serv1"/></SERVER>
<SERVER HOSTNAME="serv2"><CIFS_SERVICE NETBIOSNAME="serv2"/></SERVER>
</SOURCE_SERVER>
Я переформатировать свой пост, так что XML видно. Действительно ли в вашем XML-файле не закрывается ' SOURCE_SERVER>'? Вы имели в виду, что хотите добавить '' to ''? Пожалуйста, отредактируйте свое сообщение, чтобы отразить правильные требования. –
Я сделал исправление Синан – Ninja
@Ninja См. Мой ответ ниже. Является '' CIFS_SERVICE NETBIOSNAME = "serv1"> 'правильным? Не должно быть ' '? В противном случае это не XML. –