フォルダー「c:\srini\perl\in\」に複数の XML ファイルがあります...これらすべてのファイルの構造は同じです...各 XML で 2 つのタグを検索する必要があり、そのタグ値がその中の "@@@" ... "&" に置き換える必要があります ... SHORT_DESC と XXX_NAME の 2 つのタグ値をチェックする必要があります ... TAG 値のいずれかに "@@@" が含まれている場合..「&」に置き換える必要があります..以下はXMLファイルです....
<TOPHEADER>
<HEADER>
<NAME>ABC LTD</NAME>
<SHORT_DESC>ABC COMPY @@@ LTD</SHORT_DESC>
<XXX_NAME>ABC COMPANY FOR XXX AND YYY </XXX_NAME>
</HEADER>
<HEADER>
<NAME>XYZ LTD</NAME>
<SHORT_DESC>XYZ COMPY @@@ LTD</SHORT_DESC>
<XXX_NAME>XYZ COMPANY FOR @@@</XXX_NAME>
</HEADER>
<HEADER>
<NAME>DEF LTD</NAME>
<SHORT_DESC>DEF COMPY AND LTD</SHORT_DESC>
<XXX_NAME>DEF COMPANY FOR @@@</XXX_NAME>
</HEADER>
</TOPHEADER>
以下のコードを使用して、単一のファイルのタグ値を置き換えています..しかし、複数のファイルを処理するためのより良い方法があるかどうか知りたい....
open (my $input_file, '<', 'c:\srini\perl\in\test1.xml') or die "unable to open $input_file $!\n";
open (my $output_file, '>', 'c:\srini\perl\in\test1_out.xml') or die "unable to open $output_file $!\n";
my $input;
{
local $/; #Set record separator to undefined.
$input = <$input_file>; #This allows the whole input file to be read at once.
}
$input =~ s/@@@/&/g;
print {$output_file} $input;
close $input_file or die $!;
close $output_file or die $!;