Xml批量节点附加问题

时间:2012-07-02 04:54:09

标签: c# asp.net xml c#-4.0 c#-3.0

我想要生成一个百万条记录的xml文件。为此,我有一个只有一个值集的示例xml文件。使用此xml文件填充ramdom值一百万次。 我创建了一个solutin,但它非常耗时。我的代码是

try
        {
            label1.Text = "File creation in progress  ...";
            Random rnd = new Random();
            string sStartupPath = Application.StartupPath;
            string sName = "";
            int flag = 0;
            XmlDocument XmlFile = new XmlDocument();
            XmlFile.Load(sStartupPath + @"..\..\..\BankStatement.xml");
            XmlFile.Save(@"C:\XmlData\Bank.xml");
            XmlDocument XmlF = new XmlDocument();
            XmlF.Load(@"C:\XmlData\Bank.xml");
            long k = Convert.ToInt32(textBox1.Text);
            for (int j = 1; j < k; j++)
            {
                XmlTextReader objXmlTextReader = new XmlTextReader(sStartupPath + @"..\..\..\BankStatement.xml");
                while (objXmlTextReader.Read())
                {
                    switch (objXmlTextReader.NodeType)
                    {
                        case XmlNodeType.Element:
                            sName = objXmlTextReader.Name;
                            if (sName == "DataXml")
                            {
                                if (flag == 0)
                                    flag = 1;
                            }
                            break;
                        case XmlNodeType.Text:
                            if (flag == 1)
                            {
                                XmlNodeList elemList = XmlFile.GetElementsByTagName(sName);
                                for (int i = 0; i < elemList.Count; i++)
                                {
                                    if (elemList[i].Name == "Name")
                                        elemList[i].InnerXml = generateNames();
                                    else if (elemList[i].Name == "EmailID")
                                        elemList[i].InnerXml = generatemailids();
                                    else
                                        elemList[i].InnerXml = rnd.Next(500000).ToString();
                                }
                            }
                            break;
                        case XmlNodeType.EndElement:
                            sName = objXmlTextReader.Name;
                            if (sName == "DataXml")
                            {
                                if (flag == 1)
                                    flag = 0;
                            }
                            break;
                    }
                }
                XmlDocument dd = new XmlDocument();
                dd.LoadXml(XmlFile.InnerXml); 
                XmlNodeList node=dd.GetElementsByTagName("Customers");
                XmlDocumentFragment xfrag = XmlF.CreateDocumentFragment();
                xfrag.RemoveAll();
                for (int i = 0; i < 1; i++)
                {
                    xfrag.InnerXml = node[i].InnerXml;                        
                    XmlF.DocumentElement.FirstChild.AppendChild(xfrag);                        
                }

                XmlF.Save(@"C:\XmlData\Bank.xml");

            }

            label1.Visible = false;
            MessageBox.Show("File creation success..!");
        }
        catch (Exception ex)
        {
            label1.Text = "";
            MessageBox.Show("Error Occured");
        }

请给我一个更好的解决方案。

2 个答案:

答案 0 :(得分:2)

我所知道的编写XML的最快方法(不是手动构建XML片段)是使用XmlWriter

  

XmlWriter类是一个提供的抽象基类   仅向前,只写,非缓存的生成XML流的方式。它   可用于构建符合W3C Extensible的XML文档   标记语言(XML)1.0(第四版)推荐和   XML推荐中的命名空间。

MSDN has a walkthrough关于如何使用抽象的XmlWriter类。

答案 1 :(得分:0)

要编写大型XML文件,您应该使用XmlTextWriter