重新安排大型XML文档

时间:2012-02-14 07:22:54

标签: c++ xml

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

对于前: 订单[] = {o3,o2,o1};

Inputfile中:

<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(string tag,string inputfile); 50GB文件中的对象计数大于12000000。 任何人都可以建议我另一种方法来改善表现吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

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