日期:2014-05-19  浏览次数:20482 次

大家来看看,删除XML节点时候出来的奇怪问题.
XmlDocument   xmld   =   new   XmlDocument();
xmld.Load( "D:/ty/as.xml ");
XmlNode   root   =   xmld.SelectSingleNode( "softwares ");
XmlNodeList   xl   =   root.SelectNodes( "software ");
//XmlNodeList   xl   =   root.ChildNodes;
foreach(XmlNode   n   in   xl)
{
        root.RemoveChild(n);
}
xmld.Save( "D:/ty/as1.xml ");

代码如上,出问题的地方就在XmlNodeList   xl   =   root.SelectNodes( "software ");
//XmlNodeList   xl   =   root.ChildNodes;
我如果用了注释中的语句来获取root下面的节点,在foreach   中删除的时候只执行一次就跳出了(就这里我觉得很奇怪),结果只会删除一个节点.如果用   root.SelectNodes( "software ")这样子的,就不会出问题,会全部都删除了!
虽然功能实现了,但是我试了半天用root.SelectNodes( "software "),和root.ChildNodes   得到的东西是一样的,但就是不知道删除的时候为什么会出错!


------解决方案--------------------
root.SelectNodes( "software ")与root.ChildNodes集合各含几个元素?肯定不一样的。
------解决方案--------------------
学习。。。。
------解决方案--------------------
foreach操作 读取 数据 是 只读 模式的
你需要 用 for代替
for(int ix=0; ix <xl.Length; ix++)
{
root.RemoveChild(xl[ix]);
}

------解决方案--------------------
for(int ix=0; ix <xl.Length; ix++) { root.RemoveChild(xl[ix]); ix -- ; //这里补充一句. }