使用 linq 从 XML 文档中删除最近 30 天的节点
本文关键字:最近 节点 删除 linq XML 文档 使用 | 更新日期: 2023-09-27 17:57:02
我有像 XML 文档一样
<Records>
<Record>
<Event>Home Value Submits Page 2</Event>
<Date>17-Mar-14 4:49:32 PM</Date>
</Record>
<Record>
<Event>Hm Value Submits Hm Pg</Event>
<Date>17-Mar-14 4:54:36 PM</Date>
</Record>
</Records>
我需要从 XML 文档中删除最近 30 天的节点。
我正在使用此代码,但它不起作用,
var xelement = XElement.Load(Server.MapPath("~/XMLStorage/DataBase.xml"));
var value30days =
from nm in xelement.Elements("Record")
where (DateTime)nm.Element("Date") <= DateTime.Now && (DateTime)nm.Element("Date") >= DateTime.Now.AddDays(-30)
select nm;
foreach (XElement xEle in value30days)
{
xEle.Remove();
}
xelement.Save(Server.MapPath("~/XMLStorage/DataBase.xml"));
请给出一些解决方案。
这是在枚举/查询集合时更改集合而导致的有趣问题之一。 一旦您尝试删除第一项,就会中断查询。
试试这个:
foreach (XElement xEle in value30days.ToArray())
{
xEle.Remove();
}
ToArray
调用将确保在开始修改 XML 内容之前返回整个结果集。 然后,您可以循环访问数组并根据需要删除任意数量的这些项,而不会中断循环。