split xml document into chunks

后端 未结 3 547
慢半拍i
慢半拍i 2021-01-07 03:26

I have a large xml document that needs to be processed 100 records at a time

It is being done within a Windows Service written in c#.

The structure is as fo

3条回答
  •  醉梦人生
    2021-01-07 03:35

    Another naive solution; this time for .NET 2.0. It should give you an idea of how to go about what you want. Uses Xpath expressions instead of Linq to XML. Chunks a 100 order docket into 10 dockets in under a second on my devbox.

     public List ChunkDocket(XmlDocument docket, int chunkSize)
        {
            List newDockets = new List();
            //            
            int orderCount = docket.SelectNodes("//docket/order").Count;
            int chunkStart = 0;
            XmlDocument newDocket = null;
            XmlElement root = null;
            XmlNodeList chunk = null;
    
            while (chunkStart < orderCount)
            {
                newDocket = new XmlDocument();
                root = newDocket.CreateElement("docket");
                newDocket.AppendChild(root);
    
                chunk = docket.SelectNodes(String.Format("//docket/order[position() > {0} and position() <= {1}]", chunkStart, chunkStart + chunkSize));
    
                chunkStart += chunkSize;
    
                XmlNode targetNode = null;
                foreach (XmlNode c in chunk)
                {
                    targetNode = newDocket.ImportNode(c, true);
                    root.AppendChild(targetNode);
                }
    
                newDockets.Add(newDocket);
            } 
    
            return newDockets;
        }
    

提交回复
热议问题