使用Foreach循环时出现问题,一旦找到第一个条件,就会出现循环

时间:2017-05-25 15:21:36

标签: c# linq foreach

我正在尝试遍历xml节点及其childNode。虽然这样做我试图检查dataList是否包含childNode内部值,如果它不在List中,我将从xml中删除父节点。但我面临的问题是,在找到第一个条件后,foreach循环结束,而来自顶部for的统计数据循环。请在下面找到他的代码:
更新
List<XmlNode> deletenode = new List<XmlNode>();

for (int i = 0; i < xmlNodeList.Count; i++)
{
    deletenode = new List<XmlNode>();
    foreach (XmlNode node in xmlNodeList[i].ChildNodes) 
    {
        if (node.Name == "testNode") 
        {  
            XmlNode delNode = node;
            if (node.ChildNodes[0].Name.ToString() == "nodeName")
            {
                string[] childNodesplit = node.ChildNodes[0].InnerText.Split(',');
                if (!dataList.Any(e => e.Equals(childNodesplit[0].ToString())))
                {                                            
                    delNode = node.ChildNodes[0].ParentNode;                                           
                    deletenode.Add(delNode);                       
                }                                        
            }
        }
    }
   foreach (XmlNode nd in deletenode)
   {
    if (nd.Name == "testNode")
    {
      ElemList[i].RemoveChild(nd);
    }

  }
}

任何人都可以指出我在foreach循环中所做的错误,因此它不会在匹配一个条件时出现循环。  我更新了我的代码,但我无法删除这些节点 更新
我现在得到了解决方案,我错过了将deletenode列表作为每个循环的新列表。

1 个答案:

答案 0 :(得分:5)

删除节点的父节点,即在循环中运行的子节点。

delNode = node.ChildNodes[0].ParentNode;  //PARENT !                                
xmlNodeList[i].RemoveChild(delNode);  //REMOVE

如果必须删除它们,您可以:

  • 将它们保存到单独的列表中

  • 在函数末尾迭代该列表并删除所有节点   在里面,一个接一个