我正在使用c#,并从外部数据源创建xml并将xml保存为单个xml文件。我该如何拆分xml并将其保存为多个xml文件?例如,假设我的xdocument xml中有263条记录。我需要将它分成多个包含25个记录的xml文件。 (这是规范 - 没有办法绕过它)。因此,对于这个例子,我最终得到了11个xml文件。使用c分割xml文件#
我的数据源是一个XML文件,如果更容易,我可以选择将它分成每个XML文件25个记录的块。我怎么会这样做呢?
我正在使用c#,并从外部数据源创建xml并将xml保存为单个xml文件。我该如何拆分xml并将其保存为多个xml文件?例如,假设我的xdocument xml中有263条记录。我需要将它分成多个包含25个记录的xml文件。 (这是规范 - 没有办法绕过它)。因此,对于这个例子,我最终得到了11个xml文件。使用c分割xml文件#
我的数据源是一个XML文件,如果更容易,我可以选择将它分成每个XML文件25个记录的块。我怎么会这样做呢?
怎么是这样的:
string [email protected]"<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;
});
其中每个文件包含25个(或更少的最后文档的情况下)的原XDocument
的孩子这将返回一个IEnumerable<XDocument>
。
虽然这看起来可以用于OP,但你可能想要补充一些关于它在做什么和如何做的解释。 – Grhm 2012-02-08 11:04:57
@Grhm:我添加了一些评论来说明一些情况。 – spender 2012-02-08 11:12:57
好东西,谢谢! – ManOnAMission 2016-07-14 10:21:13
该规格需要*稍微*比这更慷慨 - 你*不能*将263条记录分割成包含* 25条记录的文件,除非你很乐意跳过一些或重复一些。您是否允许最终文件包含少于25条记录?目前还不清楚你的第二段如何与你的第一段不同... – 2012-02-08 10:40:31