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

SDL*_*ner 0 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);
    }

  }
}
Run Code Online (Sandbox Code Playgroud)

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

Tig*_*ran 5

您删除节点的父节点,您在循环中运行的子节点.

delNode = node.ChildNodes[0].ParentNode;  //PARENT !                                
xmlNodeList[i].RemoveChild(delNode);  //REMOVE
Run Code Online (Sandbox Code Playgroud)

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

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

  • 在函数的末尾迭代该列表并逐个删除其中的所有节点