Paul
Paul

Reputation: 971

C# How do I determine childnode level in xml

I need to remove elements in some xml files. How do I correctly ensure that I transverse through all childnodes to remove all element with a matching name. I have code such as:

 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);
                 }                           
             }
        }
     }
  }

Is this a valid solution? How do I determine how many foreach loops to perform to ensure that all children are checked?

Thanks for your time in advance.

Upvotes: 0

Views: 1466

Answers (1)

Jason
Jason

Reputation: 89179

Recursion is your friend.

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

Upvotes: 2

Related Questions