2017-05-25 118 views
0

我想通过一个XML节点及其childNode环路。虽然这样做,我试图检查如果dataList包含childNode内部值,如果它不在列表中我删除父节点形式的XML。但我面临的问题是,在找到第一个条件之后,foreach循环正在结束并且从顶部的for循环开始统计。请在下面找到他的代码:
更新
List<XmlNode> deletenode = new List<XmlNode>();问题与Foreach循环,一旦找到第一个条件出来循环

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循环中这样做,使回路的匹配一个条件,它不会comeout。 我更新了我的代码,但我无法将这些节点删除。
UPDATE
我现在得到了解决方案,我错过了将deletenode列表作为每个循环的新列表。

回答

5

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

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

如果删除它们,您可以:

  • 保存它们放入单独的列表

  • 在功能逐一查看该列表的末尾,并删除所有节点 在它里面,一个接一个

+0

我把它们保存在一个单独的'XmlNodeList'中。 – SDLBeginner

+0

@SDLBeginner:你不必*,但这是可能的解决方案之一,是的。 – Tigran

+0

我添加了我更新的代码,但我无法删除这些节点。 – SDLBeginner