2012-03-15 69 views
0

我需要刪除某些xml文件中的元素。我如何正確地確保橫切所有子節點以刪除具有匹配名稱的所有元素。我有代碼如:C#如何確定xml中的子節點級別

string strFilename = @"D:\sample.xml"; 
XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(strFilename); 

XmlNode parentNode; 
parentNode = xmlDoc.DocumentElement; 

foreach (XmlNode node1 in parentNode.ChildNodes) 
{ 
     foreach (XmlNode node2 in node1.ChildNodes) 
     { 
      if (node2.Name == "ElementNodeToDelete") 
      { 
       node2.ParentNode.RemoveChild(node2); 
      } 
      foreach (XmlNode node3 in node2.ChildNodes) 
      { 
      if (node3.Name == "ElementNodeToDelete") 
      { 
       node3.ParentNode.RemoveChild(node3); 
      } 
      foreach (XmlNode node4 in node3.ChildNodes) 
      { 
       if (node4.Name == "ElementNodeToDelete") 
       { 
        node4.ParentNode.RemoveChild(node4); 
       }       
      } 
     } 
    } 
    } 

這是一個有效的解決方案嗎?如何確定執行多少個foreach循環以確保所有孩子都被檢查?

感謝您的時間提前。

回答

2

遞歸是你的朋友。

void DeleteNodes(XmlNode root, string deleteName) 
{ 
    foreach(XmlNode node in root.ChildNodes) 
    { 
    if (node.Name == deleteName) 
    { 
     root.RemoveChild(node); 
    } 
    else 
    { 
     DeleteNodes(node,deleteName); 
    } 
    } 
} 
+0

謝謝你傑森。正是我在找什麼。遞歸是我的朋友。 – Paul 2012-03-15 21:26:33