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

  • 相关阅读:
    第四次作业
    团队编程第三次博客
    团队编程2
    团队编程
    ARM寄存器总结:
    proc介绍及问题分析
    Ubuntu连接手机步骤
    Bluetooth(android 4.2.2版本)
    Android Bluetooth 总结
    android代码常识
  • 原文地址:https://www.cnblogs.com/alexzp/p/2735715.html
Copyright © 2011-2022 走看看