我有幾個相當大的XML文件,表示從第三方供應商使用的系統導出的數據。我劈砍每個XML文件的2500條記錄的結果,因爲這些文件變得巨大而且不可管理。但是,第三方供應商要求我將所有這些XML文件合併到一個文件中。這些XML文件中有78個,它們的總大小超過700MB!瘋狂,我知道......那麼如何將這些文件結合起來以適應使用C#的供應商呢?希望有一個真正有效的方式來做到這一點,而不立刻使用LINQ :-)C#中最有效的方式是將多個具有相同模式的xml文件合併在一起?
6
A
回答
4
我要去這裏走出去的肢體,並假設你的XML看起來像中的所有文件的讀取:
<records>
<record>
<dataPoint1/>
<dataPoint2/>
</record>
</records>
如果是這樣,我會打開一個文件流並寫入<records>
部分,然後順序打開每個XML文件並將所有行(第一個和最後一個除外)寫入磁盤。這樣你就不會在內存中產生巨大的字符串,並且它們都應該非常快速地進行編碼和運行。
public void ConsolidateFiles(List<String> files, string outputFile)
{
var output = new StreamWriter(File.Open(outputFile, FileMode.Create));
output.WriteLine("<records>");
foreach (var file in files)
{
var input = new StreamReader(File.Open(file, FileMode.Open));
string line;
while (!input.EndOfStream)
{
line = input.ReadLine();
if (!line.Contains("<records>") &&
!line.Contains("</records>"))
{
output.Write(line);
}
}
}
output.WriteLine("</records>");
}
2
使用DataSet.ReadXml()
,DataSet.Merge()
和DataSet.WriteXml()
。讓框架爲你做好工作。
事情是這樣的:
public void Merge(List<string> xmlFiles, string outputFileName)
{
DataSet complete = new DataSet();
foreach (string xmlFile in xmlFiles)
{
XmlTextReader reader = new XmlTextReader(xmlFile);
DataSet current = new DataSet();
current.ReadXml(reader);
complete.Merge(current);
}
complete.WriteXml(outputFileName);
}
爲了進一步說明和示例,從微軟看一看this article。
+0
這是我採取的原始路線。問題是這個過程最終使用了一段RAM! – 2009-09-10 15:17:30
相關問題
- 1. 將多個XML文件合併爲具有不同格式的單個文件
- 2. 將具有相同根元素的多個XML文件合併到一個XML文件中
- 3. 將兩個具有相似模式的XML文檔組合起來
- 4. 將一個XML文檔映射到具有不同模式的另一個XML文檔的最佳方法
- 5. 合併兩個文件的大多數內存有效方式
- 6. 如何合併兩個XML文件具有相同的參數?
- 7. 將具有不同屬性的多個xml文件合併爲一個屬性
- 8. 在多個PHP文件中連接MySQL的最有效方式
- 9. SVN - 處理相同文件的最有效方式
- 10. 在多個模式中改變具有相同名稱的表
- 11. 合併在bash中具有相同值的兩個文件
- 12. 將多個相同jrxml格式的報告合併到一個文件中
- 13. 具有相同根名稱的多個XML文件引用1 XML模式:設置元素的唯一鍵
- 14. 在Perl中合併具有相同文件名的文件
- 15. 結合具有相同列和不同值的兩個表的最佳方式
- 16. C# - 將多個具有相同屬性的LINQ集合結合起來
- 17. 具有相同實現的多種方法的模式
- 18. 將多個文件合併爲一個XML文件的最佳方法?
- 19. 在Android中反覆寫入XML文件的最有效方式是什麼?
- 20. excel以編程方式合併列z中具有相同值的所有行
- 21. 在.NET中創建文件的最快,最有效的方式
- 22. 正則表達式具有多個條件的不同模式
- 23. logstash:具有不同模式的多個日誌文件
- 24. 將圖像合併在一起並不是真的有效
- 25. 多個模式在一頁中具有相同的數據目標
- 26. 合併並聚集具有相同模式的兩個或更多集合的某些字段mongodb
- 27. XMl:我有一個模式的xml文件,我想將此xml文件轉換爲另一個具有不同命名約定的xml文件
- 28. 具有多繼承性的XML模式
- 29. 將包含具有相同名稱的對象的多個.RData文件合併爲一個.RData文件
- 30. 將一個文件ID映射到另一個的最有效方式
這將是最快的方式,但它有點'哈克'。 – 2009-09-10 14:48:29
同意,'hacky'充其量:p DataSet.Merge似乎更加優雅,但我不知道如何將內存效率。 – JustLoren 2009-09-10 15:05:50
我把模式烘焙到每個XML文件中,所以這會變得更加'hacky' – 2009-09-10 15:18:20