遍历xml节点删除的问题
已经有xml文件<?xmlversion="1.0"?><FileList><FileFileName=""><FileFileName=""><FileFileName...
已经有xml文件
<?xml version="1.0"?>
<FileList>
<File FileName="">
<File FileName="">
<File FileName="a.txt" >
<File>
<File FileName="">
</FileList>
我现在要删除FileName=""或者没有FileName属性的File节点
代码
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load(filename);
XmlNode root=xmlDoc.DocumentElement;
XmlNodeList nodeList=root.ChildNodes;
foreach(XmlNode node in nodeList)
{
if(node.Attributes["FileName"]==null || node.Attributes["FileName"].Value=="")
{
node.ParentNode.RemoveChild(node);
continue;
}
//省略此处代码dosomething
}
现在的情况是foreach里的循环只有一次,nodeList的第一个节点进入,但是删除第一个节点continue之后,用步进debug发现第二个节点的判定已经不在nodeList里面,跳出了循环 展开
<?xml version="1.0"?>
<FileList>
<File FileName="">
<File FileName="">
<File FileName="a.txt" >
<File>
<File FileName="">
</FileList>
我现在要删除FileName=""或者没有FileName属性的File节点
代码
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load(filename);
XmlNode root=xmlDoc.DocumentElement;
XmlNodeList nodeList=root.ChildNodes;
foreach(XmlNode node in nodeList)
{
if(node.Attributes["FileName"]==null || node.Attributes["FileName"].Value=="")
{
node.ParentNode.RemoveChild(node);
continue;
}
//省略此处代码dosomething
}
现在的情况是foreach里的循环只有一次,nodeList的第一个节点进入,但是删除第一个节点continue之后,用步进debug发现第二个节点的判定已经不在nodeList里面,跳出了循环 展开
2个回答
展开全部
你直接修改了nodeList,这一般在做循环时是不允许直接这么做的。你可以尝试在遍历一个list时,在循环体同时删除list里的内容,你会得到一个异常。建议你如下处理这个问题:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("11.xml");
XmlNode root = xmlDoc.DocumentElement;
XmlNodeList nodeList = root.ChildNodes;
List<XmlNode> nodesToRemove = new List<XmlNode>();
foreach (XmlNode node in nodeList)
{
if (node.Attributes["FileName"] == null || node.Attributes["FileName"].Value == "")
{
nodesToRemove.Add(node);
continue;
}
//省略此处代码dosomething
}
foreach (XmlNode node in nodesToRemove)//这里再来做删除
{
node.ParentNode.RemoveChild(node);
}
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("11.xml");
XmlNode root = xmlDoc.DocumentElement;
XmlNodeList nodeList = root.ChildNodes;
List<XmlNode> nodesToRemove = new List<XmlNode>();
foreach (XmlNode node in nodeList)
{
if (node.Attributes["FileName"] == null || node.Attributes["FileName"].Value == "")
{
nodesToRemove.Add(node);
continue;
}
//省略此处代码dosomething
}
foreach (XmlNode node in nodesToRemove)//这里再来做删除
{
node.ParentNode.RemoveChild(node);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询