C#如何确定xml中的子节点级别

时间:2012-03-15 21:11:25

标签: c# xml

我需要删除某些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循环以确保检查所有子项?

感谢您的提前时间。

1 个答案:

答案 0 :(得分:2)

递归是你的朋友。

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