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

时间:2014-04-07 11:14:43

标签: c# xml linq

我有像

这样的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 Document中删除最近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"));

请提供一些解决方案。

1 个答案:

答案 0 :(得分:2)

这是在枚举/查询集合时更改集合所带来的有趣问题之一。只要您尝试删除第一个项目,就会中断查询。

试试这个:

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

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