我有以下格式的XML文件:
<installer>
<Plugins>
.
.
.
</Plugins>
</installer>
<installer>
<Plugins>
.
.
.
</Plugins>
</installer>
因此,正如您所看到的,这里有2个部分,即2个安装程序块。 我想将第一个安装程序部分分离并重定向到Test1.xml文件,将第二个安装程序部分重定向到Test2.xml。
我知道使用for循环实现相同的目的。但是,请使用sed / awk为我提供任何解决方案以加快处理速度。
答案 0 :(得分:2)
请不要使用正则表达式或基于行的方法来拆分XML。这种方式是脆弱的代码和破碎的XML,这对所有相关人员来说都是坏消息。
使用您在上一个问题中发布的XML作为参考点:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
use Data::Dumper;
my $file_extn = 1;
sub split_installer {
my ( $twig, $installer ) = @_;
open ( my $output, ">", "Test".$file_extn++.".xml" ) or warn !;
print {$ouput} $installer -> sprint();
close ( $output );
}
my $twig = XML::Twig -> new ( twig_handlers => { 'installer' => \&split_installer } ) -> parsefile ( 'your_file.xml );
很多这是由实用工具xml_split
完成的。
答案 1 :(得分:0)
% cat test.xml
<installer>
<Plugins>
.
.
.
</Plugins>
</installer>
<installer>
<Plugins>
.
.
.
</Plugins>
</installer>
split -l 7 test.xml test
% cat testaa
<installer>
<Plugins>
.
.
.
</Plugins>
</installer>