使用 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"));

请给出一些解决方案。

使用 linq 从 XML 文档中删除最近 30 天的节点

这是在枚举/查询集合时更改集合而导致的有趣问题之一。 一旦您尝试删除第一项,就会中断查询。

试试这个:

    foreach (XElement xEle in value30days.ToArray())
    {
        xEle.Remove();
    }

ToArray调用将确保在开始修改 XML 内容之前返回整个结果集。 然后,您可以循环访问数组并根据需要删除任意数量的这些项,而不会中断循环。