2012-07-06 31 views
0

我有這樣的結果集,我從XML文件操縱/從LINQ的刪除項目以XML結果集

calendarDocument = XDocument.Load(@"C:\CalendarDB.xml"); 
IEnumerable<XElement> elements = from e in calendarDocument.Root.Elements("Session") select e; 

加載未讓說,我需要從日曆文件刪除元素。這會工作嗎?

elements.ToList().Remove(someElement); 
calendarDocument.Save(@"C:\CalendarDB.xml"); 

這是怎麼回事?

elements.ToList().Remove(someElement); 
elements.Last().AddAfterSelf(anotherElement); 
elements.Last().AddAfterSelf(yetAnotherElement); 
element.ToList().Remove(anotherElement); 
calendarDocument.Save(@"C:\CalendarDB.xml"); 

我,每次我打電話的感覺上次(),它返回一個新的結果直接設置在日曆文件,但是當我打電話刪除(),直到我把它保存不會從文件中刪除元素(),如果在每次Remove()後不立即調用Save(),則對Last()的下一次調用將返回與之前相同的結果集,但仍包含已刪除的元素。

有人可以告訴我這是如何工作的請。每次都需要在Remove()後每次調用Save()以獲取Last()中的最新內容?

回答

0

您不得調用ToList,它會創建結果集的副本,因此從中刪除不會影響原始文檔。要從文檔中移除元素,只需在元素本身調用Remove。例如:

XDocument doc = XDocument.Parse("<root><child>a</child><child>b</child></root>"); 

IEnumerable<XElement> children = doc.Root.Elements("child"); 

XElement elementToRemove = children.Last(); 
elementToRemove.Remove(); 

XElement newLastElement = children.Last(); 
Console.WriteLine(newLastElement.Value); 

children變量保存enumerable,它只是一個查詢的定義。每次從它開始查詢時,它都會重新啓動查詢並獲得最新的結果。但是你從小孩重新開始。

沒有必要以任何方式提交更改,它們會立即應用。只有當您想要將修改後的文檔寫回文件時,您才需要在文檔上調用Save。