0

我有一个 XML 文件,其中包含超过 50 000 条记录(未来可能有多达 500 000 条记录)。每个记录有 3 个级别 - 主要级别(用于区分记录)、通用数据级别(标签包含定义每个记录的属性)和第三级包含特定于每个记录的数据(主要作为属性,但有时作为内部文本)。我的任务是将这个文件“分解”成多个较小的文件。第三层有一个属性,它决定了整个记录属于哪个组。

算法应该是这样的:

对于文件中的每条记录:

  • 读取包含确定记录所属组所需信息的属性(这很容易,我解决了这部分)
  • 将整个记录(每个级别的每个字母)复制到适当的文件中

所以我的问题是将数据复制到新文件中最简单(也是最有效的方法)是什么?请记住,我需要复制整个记录,而不仅仅是一些特定数据。我正在使用 VS 2010 在 C# 中工作。

4

3 回答 3

1

您可以使用 aXmlReader来遍历源文件的节点,一旦遇到满足您要求的节点,只需读取它并复制到新文件(InnerXml当前节点的属性将为您提供可以存储的整个字符串表示到一个新文件)。

顺便说一句,如果您希望您的 XML 增长到数百万条记录的大小,我建议您提前预测这种增长并切换到更适合处理此类数据量的数据库。

于 2012-06-19T09:42:31.753 回答
1

最有效的方法(关于性能)是拥有一个XmlReader实例,通过你的大文件。由于您有多个可能是目标的组,因此您应该有多个实例XmlWriter,您可以按需创建这些实例并将其存储在由“组键”索引的字典中,以供下一次迭代使用。

使用XmlReader并且XmlWriter您避免将整个文件加载到内存中。

要跟踪您经历的嵌套级别,您可以使用 a Stack,在向内导航时推送项目并在向外导航时弹出项目,或者只是方法中的局部变量。

完成后不要忘记关闭Stream实例。

于 2012-06-19T09:49:30.737 回答
0

通过System.Xml您可以执行操作。创建List<XmlElement>并覆盖每个级别的三个级别。

   XmlDocument doc = new XmlDocument();
      doc.Load("Test.xml");
      XmlElement root = doc.DocumentElement;
    //Preform your read and write operation here
     doc.Save("Test.xml");
于 2012-06-19T09:53:03.103 回答