我有一个从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");
我有一种感觉,每当我调用Last()时,它会直接从CALENDAR FILE返回一个新的结果集,但是当我调用Remove()时,它不会从文件中删除元素,直到我调用Save()并且我不会在每次Remove()之后立即调用Save()然后下一次调用Last()将返回与之前相同的结果集,仍然包含已删除的元素。
有人可以告诉我这是如何运作的。我是否需要每次在Remove()之后调用Save()才能从Last()中获取最新信息?
答案 0 :(得分: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变量包含可枚举,这只是查询的定义。每次从它开始查询时,它都会重新启动查询,从而为您提供最新的结果。但你从孩子们开始桅杆。
无需以任何方式提交更改,它们会立即应用。只有当您想将修改后的文档写回文件时,才需要在文档上调用“保存”。