我將一些日誌事件轉儲到XML文件中,每5分鐘開始一個新文件。我一直在使用的XDocument和它的XElement我真的很喜歡,遞增地將XML XDocument寫入磁盤,保存有效的XML
_xDocument = XDocument.Parse("<LogEntires/>");
_xDocument.Root.Add(xElementLogEventList.ToArray());
_xDocument.Save(_outFileName);
我想它有計時器堅持到磁盤每10秒左右,所以最近發生的事件不只是在內存中,人如有必要可以檢查文件。但是XDocument只有寫入整個文檔的Save()和WriteTo()方法。並猜測沒有</Root>標記,無論如何這將是無效的Xml。
我的下一個想法是使用XmlWriter並立即刷新我的FileStream,並跟蹤添加結束自己的關閉</Root>標記,直到完成並關閉文件後才生成無效的XML。
我真的很想在磁盤上擁有有效的Xml,並且如果我想寫一個根標籤,然後在我進行下一次刷新時需要五到十秒鐘,只需備份並移除根標記,然後追加下一個數百個元素並寫入並刷新流。 xmlWriter只是轉發,所以我不確定最有效的方式來做到這一點。
在磁盤上使用有效的xml最有效的方法是什麼,但最終保持流式傳輸新元素,而不是每次都重寫整個文檔?我的恐懼是,我錯過了像xDocument.AppendUpdatesToFile(_outfile)或類似的東西明顯的東西...
如果不是如何有效地找到並刪除最終的根標籤,並追加新的元素在一個流式的方式?
我同意XML對此不友好。至於列出根級別的所有元素。根級允許只有一個標籤。這不是有效的XML。 – DanO
是的,它不是有效的XML,而是收集有效的XML片段...... http://msdn.microsoft.com/en-us/library/cakk7ha0(v=VS.100).aspx#Y136。根據你的目標,它可能會或可能不適合你。 –