1

这里

<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 个文件。

4

2 回答 2

5

xml_split是XML::Twig附带的一个工具,看起来非常接近您正在寻找的东西。xml_split -g3 -l1 my.xml将为您提供大部分内容,唯一的区别是顶级元素将具有由工具分配的标签名称,而不是原始名称。

于 2013-11-02T11:59:36.157 回答
4

使用xsh,一个围绕XML::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 ;
}
于 2013-11-02T12:47:25.373 回答