zoukankan      html  css  js  c++  java
  • 一次删除多个XML节点(RemoveChild())

    1).(删除某一个指定的节点):

     1 nodelist = xmldoc.SelectSingleNode("employees").ChildNodes;            
     2             foreach (XmlNode xn in nodelist)
     3             {
     4                 //remove node by node's attribute
     5                 xmlele = (XmlElement)xn;
     6                 if (xmlele.GetAttribute("id") == "103")
     7                 {
     8                      xmln.RemoveChild(xn);                    
     9                 }                
    10 
    11                 //remove node by node's name
    12                 if (xn.Name == "test")
    13                 {
    14                     xmln.RemoveChild(xn);                
    15                 }
    16 
    17                 ////remove node by node's innertext
    18                 if (xn.FirstChild.InnerText.ToString().Contains("a"))
    19                 {
    20                     xmln.RemoveChild(xn);
    21                 }
    22             }         

    这样只能删除找到的第一个与if语句相同的节点(node).但是如果我们想一次删除多个node的话,这样的结果就不是我们想要的了。
    RemoveChild()方法修改childnodes List,并且使foreach失效,所以你需要中止循环后的第一个Remove。删除多个node,你必须使用一个Outer Loop(Break 它,如果没有删除的循环),或向后扫描列表:

    2). Outer Loop:

     1 while (true)
     2 {
     3     bool removed = false;
     4     foreach (XmlNode xn in nodelist)
     5    {
     6         if (xn.FirstChild.InnerText.ToString().Contains("a"))
     7        {
     8            xn.ParentNode.RemoveChild(xn);
     9            removed = true;
    10            break;
    11         }
    12     }
    13 
    14     if (!removed)
    15          break;
    16 }

    3). 向后扫描列表:

     1   for (int i = nodelist.Count - 1; i >= 0; i--)
     2   {
     3         xmln = nodelist[i];
     4         if (xmln.Name == "test")
     5              xmln.ParentNode.RemoveChild(xmln);
     6 
     7          //xmln=nodelist[i];
     8          //if (xmln.FirstChild.InnerText.ToString().Contains("a"))
     9         //    xmln.ParentNode.RemoveChild(xmln);
    10    }

    记得在最后要保存修改的:
    xmldoc.Save(@"test.xml");

  • 相关阅读:
    假期周总结七
    假期周总结六
    假期周总结五
    假期周总结四
    假期周总结三
    假期总结二
    假期周总结一
    项目目标分析
    lightoj 1013
    lightoj 1012
  • 原文地址:https://www.cnblogs.com/alexzp/p/2735715.html
Copyright © 2011-2022 走看看