2017-05-25 83 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