如何在Perl中使用正则表达式拆分xml文件

时间:2013-11-02 11:07:07

标签: regex perl

这里

<root>
    <SchoolOrInstitution schoolType="highschool">
        <SchoolName>BUTLER HIGH SCHOOL</SchoolName>
        <Degree degreeType="highschool"/>
    </SchoolOrInstitution>
    <SchoolOrInstitution schoolType="highschool">
        <SchoolName>BUTLER HIGH SCHOOL</SchoolName>
        <Degree degreeType="highschool"/>
    </SchoolOrInstitution>
    <SchoolOrInstitution schoolType="highschool">
        <SchoolName>BUTLER HIGH SCHOOL</SchoolName>
        <Degree degreeType="highschool"/>
    </SchoolOrInstitution>
    ..............
</root>

我想根据SchoolOrInstitution标记的数量将此xml拆分为多个文件。

每个XML都应该有3个这样的标记。

因此,如果邮件文件包含9个SchoolOrInstitution标记,则应创建3个子文件。

root标记也将分配给所有3个文件。

2 个答案:

答案 0 :(得分:5)

xml_splitXML::Twig附带的工具,似乎与您正在寻找的工具非常接近。 xml_split -g3 -l1 my.xml将帮助您完成大部分工作,唯一的区别是顶级元素将具有由工具指定的标记名称,而不是原始名称。

答案 1 :(得分:4)

使用xshXML::LibXML的包装:

my $old := open 19741254.xml ;
my $n = 1;
while $old/root/SchoolOrInstitution[1] {
      my $new := create root ;
      xmv $old/root/SchoolOrInstitution[position() <= 3] into $new/root ;
      save :f concat($n, '.xml') $new ;
      $n = $n + 1 ;
}