将XML中的数据复制到新文件中

时间:2012-06-19 09:37:45

标签: c# xml

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

算法应该是这样的:

对于文件中的每条记录:

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

使用XmlReaderXmlWriter可以避免将整个文件加载到内存中。

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

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

答案 2 :(得分: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");