这里
<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个文件。
答案 0 :(得分:5)
xml_split
是XML::Twig附带的工具,似乎与您正在寻找的工具非常接近。 xml_split -g3 -l1 my.xml
将帮助您完成大部分工作,唯一的区别是顶级元素将具有由工具指定的标记名称,而不是原始名称。
答案 1 :(得分: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 ;
}