需要按类型顺序添加元素到xml

Need to add elements in order by type to xml

我正在处理一个巨大的数据列表,我正在将这些数据解析成 xml。对于这个问题,请考虑使用多少 GB 大小和数亿个实例。我从初始数据列表开始,将其解析为一个唯一的哈希集,我可以使用它来消除重复项,然后将其解析为 xml 并保存。我最终得到了这样的结构。

<class>...
</class>
<instance>...
</instance>
.
.
.
<instance>
</instance>
<class>
</class>
<instance>
</instance>

这显然不是很容易处理,因此我尝试将其解析为所有 classes,然后是所有实例。我使用了我发现的以下代码的修改。

XElement xmlTree = new XElement("Root",
new XElement("Child1", 1),
new XElement("Child2", 2),
new XElement("Child3", 3),
new XElement("Child4", 4),
new XElement("Child5", 5)
);
XElement child1 = xmlTree.Element("Child1");
child1.AddAfterSelf(
new XElement("NewChild", 10)
);
Console.WriteLine(xmlTree);

这基本上是我想要的,但是因为我没有像 class1 class2 这样命名的元素,所以它不是很完美。我最终得到了这样的结果。

<class>
     <id>1</id>
     ....
</class>
<class>
     <id>42789945</id>
<class>
<class>
     <id>363445297</id>
</class>...

我实际上希望 classes 保持有序,而不是在第一个之后按原样倒转。我很确定我可以切换到 addbefore 并使用该实例并完成我想要的,但由于第一个实例进入更深的循环,我担心这可能会损害性能。到目前为止,通过我的优化,这个东西在 1-2 分钟的范围内运行,但如果我更深入地了解这个过程,如果我不小心的话,它会持续几个小时。

我的大问题是我是否缺少一种更简单的方法来获取最后一个 class,但在第一个实例之前,或者在实例之前添加它会伤害我吗?

谢谢 吉米

我运行一边测试一边等待答案。我会留下这个以防万一其他人遇到这个问题,因为我没有找到类似的问题。当您使用 AddBeforeSelf 时,即使之后有数百万次迭代,它也会在第一次迭代时停止,因此切换到 AddBeforeSelf 并没有增加我的执行时间,所以我会坚持下去,除非有人说整个方法是错误的。

吉米

试试这个

            XElement xmlTree = new XElement("Root", new XElement[] {
                new XElement("Child1", 1),
                new XElement("Child2", 2),
                new XElement("Child3", 3),
                new XElement("Child4", 4),
                new XElement("Child5", 5)
            });​