在perl中将xml文件拆分为两半

时间:2015-05-11 19:42:34

标签: perl awk sed

我有以下格式的XML文件:

<installer>
<Plugins>
.
.
.
</Plugins>
</installer>
<installer>
<Plugins>
.
.
.
</Plugins>
</installer> 

因此,正如您所看到的,这里有2个部分,即2个安装程序块。 我想将第一个安装程序部分分离并重定向到Test1.xml文件,将第二个安装程序部分重定向到Test2.xml。

我知道使用for循环实现相同的目的。但是,请使用sed / awk为我提供任何解决方案以加快处理速度。

2 个答案:

答案 0 :(得分:2)

请不要使用正则表达式或基于行的方法来拆分XML。这种方式是脆弱的代码和破碎的XML,这对所有相关人员来说都是坏消息。

使用您在上一个问题中发布的XML作为参考点:

Read XML file in perl

#!/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)

类似Unix的系统带有分裂。我建议尝试一下。

% cat test.xml
<installer>
<Plugins>
.
.
.
</Plugins>
</installer>
<installer>
<Plugins>
.
.
.
</Plugins>
</installer>

split -l 7 test.xml test

% cat testaa
<installer>
<Plugins>
.
.
.
</Plugins>
</installer>