一次删除多个XML节点(RemoveChild())

很好的一篇文章:

原文地址:http://www.cnblogs.com/alexzp/archive/2012/10/23/2735715.html


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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值