我是Perl的新手,我有一个任务是替换或删除多个XML文件中的注释部分(<!--
),替换后我需要将这些多个XML文件移动到其他目录。我在我的D:\folder1\
下方有许多xml文件a.xml
,b.xml
,c.xml
等等,在替换后我需要将所有文件从folder1
移到D:\folder2\
。
我通过替换-
和@@@
尝试了一个文件,但我不想从目录中的xml文件中删除评论行(<!--add aaa -->
)。
我的Perl代码如下
#!/usr/bin/perl
use strict;
use warnings;
my $tag = 'SHORT_DESC';
open my $input_file, '<', 'test.xml' or die $!;
open my $output_file, '>', 'test_out.xml' or die $!;
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;
$input =~ s/^- (?=<)//gm;
$input =~ s/<header[^>]*>\K\s*<header[^>]*>//gis;
close $input_file or die $!;
print {$output_file} $input;
close $output_file or die $!;
我的XML是
<?xml version = '1.0' encoding = 'UTF-8'?>
<!-- Order details-->
<order>
<Names>
<!-- Names-->
<content>This is dummy content</content>
</Names>
</order>
答案 0 :(得分:3)
使用正确的XML处理模块。我喜欢XML::XSH2,XML::LibXML的包装:
#! /usr/bin/perl
use warnings;
use strict;
use XML::XSH2; # To handle XML.
use Path::Tiny; # To move files around.
my ($source, $target) = @ARGV;
for my $file (path($source)->children(qr/\.xml$/)) {
xsh "open $file ; delete //comment() ; save";
path($file)->copy($target);
path($file)->remove;
}