ここでは、あなたの質問に合理的な修正を加えたソリューションを紹介します。以下のコードは、ドキュメントに記載されている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>'の終了はありませんか? ''に ''を追加したいのですか?正しい要件を反映するように投稿を編集してください。 –
訂正しました。シナナ – Ninja
@忍者下記の私の答えを参照してください。 'は正しいですか?それは ' 'ではありませんか?それ以外の場合は、XMLではありません。 –