使用c分割xml文件

本文关键字:文件 xml 分割 使用 | 更新日期: 2023-09-27 18:23:57

我使用c#,从外部数据源创建xml,并将xml保存为单个xml文件。如何将xml拆分并保存为多个xml文件?例如,假设我的xdocument xml中有263条记录。我需要将其拆分为多个xml文件,其中正好包含25条记录。(这就是规范——没有办法绕过它。)所以,对于这个例子,我最终会得到11个xml文件。

我的数据源是一个XML文件,如果比较容易的话,我可以选择将其拆分为每个XML文件25条记录的块。我该怎么做呢?

使用c分割xml文件

这样的东西怎么样:

string xml=@"<a>
     <b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/>
     <b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/>
     <b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/>
     <b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/><b/>
    </a>";
int itemsPerDoc = 25;
XDocument xDoc = XDocument.Parse(xml);
IEnumerable<XDocument> newDocs=
    xDoc
        .Root
        //grab all immediate child elements of root (named "b")
        .Elements("b") 
        //use integer division to create a group "number"
        //so groups of 25 items will share same group "number"
        .Select((e,i) => new {g = i/itemsPerDoc, e}) 
        //use group "number" to perform grouping
        .GroupBy(x => x.g)
        //now we have groups of 25, use these 25 items
        //to project into a new document containing the items
        .Select(gr => {
            XDocument newDoc = XDocument.Parse("<newDoc/>");
            newDoc.Root.Add(gr.Select(p => p.e));
            return newDoc;
        });

这将返回一个IEnumerable<XDocument>,其中每个文档包含原始XDocument的25个子级(如果是最后一个文档,则少于25个子级)。