我正在使用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