【发布时间】:2013-05-09 07:03:57
【问题描述】:
我在一个文件夹“c:\srini\perl\in\”中有多个 XML 文件......所有这些文件的结构都是相同的......我需要在每个 XML 中搜索两个标签,如果那样的话TAG 值中有“@@@”...它必须替换为“&”...它必须检查两个标签值 SHORT_DESC 和 XXX_NAME ...如果任何 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 $!;
【问题讨论】:
-
还有一种方法可以编辑同一个文件并替换值..我不希望使用 _out 扩展名创建新文件...