重新排列大型XML文档

Re arranging large XML Document

本文关键字:大型 XML 文档 排列 新排列      更新时间:2023-10-16

我需要按照给定的标记顺序重新排列一个大型XML文档(大小>50GB)。

例如:order[]={o3,o2,o1};

输入文件:

<objects>                              
    <o1>
        // Some Data
    </o1>
    <o2>
        // Some Data
    </o2>
    <o3>
        // Some Data
    </o3>
</objects>

输出文件:

<objects>                              
    <o3>
        // Some Data
    </o3>
    <o2>
        // Some Data
    </o2>
    <o1>
        // Some Data
    </o1>
</objects>

我的方法:我从一开始就读取文件,直到遇到对象标签,然后创建标签o1、o2、o3的临时文件,并这样做,直到到达文件末尾。现在使用顺序创建一个新文件。我使用C++ifstream,ofstream来执行上述任务;

这种方法花了6小时完成以下任务。函数原型为:void Rearrange(字符串标记,字符串输入文件);50GB文件中的对象计数大于12000000。有人能给我建议另一种提高表现的方法吗?

提前谢谢。

这相当容易。获取一台64位机器,内存映射整个输入和输出文件。获取指向输入文件中所有标记的指针,按标记对指针进行排序,然后按排序顺序将它们复制到输出文件中。您的磁盘性能将成为主要的瓶颈。