asp.net批量删除XML节点失败的原因及解决办法

今天操作XML的时候,用到了批量循环删除节点.出现了问题,即循环未结束,程序就跳出循环。搞了好久才弄明白。

解决前的代码:

XmlNodeList items = xn.ChildNodes; //获取节点列表
//删除所有节点
for (int i = 0; i < items.Count; i++)
{
     XmlElement page = (XmlElement)items[0];
     xn.RemoveChild(page); 
}

因为每次循环,删除节点后,item.Count的值都会-1。

如果当前的item.Count是5,i=1,第一次循环Count(5)-1=4,则这个时候的i++就是2,第二次的时候Count(4)-1就是3,而i++后就是3,所以满足条件i<Count,于是退出循环。这样就造成了没有完全遍历XML文件的全部节点,所以会中途跳出循环。

当然你用foreach(XmlNode in item.Count)的办法也不行。

解决方案是:

int len = items.Count;  
 for (int i = 0; i < len; i++)
{
       XmlElement page = (XmlElement)items[0];
        xn.RemoveChild(page); 
}

  

原文地址:https://www.cnblogs.com/qk2014/p/3904858.html