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

前端之家收集整理的这篇文章主要介绍了一次删除多个XML节点(RemoveChild())前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

很好的一篇文章

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


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

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

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

2). Outer Loop:

1@H_301_13@ while@H_301_13@ (true@H_301_13@) @H_301_13@ 2@H_301_13@ { @H_301_13@ 3@H_301_13@ bool@H_301_13@ removed = false@H_301_13@; @H_301_13@ 4@H_301_13@ 5@H_301_13@ { @H_301_13@ 6@H_301_13@ 7@H_301_13@ { @H_301_13@ 8@H_301_13@ xn.ParentNode.RemoveChild(xn); @H_301_13@ 9@H_301_13@ removed = true@H_301_13@; @H_301_13@10@H_301_13@ break@H_301_13@; @H_301_13@11@H_301_13@ } @H_301_13@12@H_301_13@ } @H_301_13@13@H_301_13@ 14@H_301_13@ if@H_301_13@ (!removed) @H_301_13@15@H_301_13@ 16@H_301_13@ }
3). 向后扫描列表:

1@H_301_13@ for@H_301_13@ (int@H_301_13@ i = nodelist.Count - 1@H_301_13@; i >= 0@H_301_13@; i--) @H_301_13@ 2@H_301_13@ { @H_301_13@ 3@H_301_13@ xmln = nodelist[i]; @H_301_13@ 4@H_301_13@ if@H_301_13@ (xmln.Name == 5@H_301_13@ xmln.ParentNode.RemoveChild(xmln); @H_301_13@ 6@H_301_13@ 7@H_301_13@ xmln=nodelist[i]; @H_301_13@ 8@H_301_13@ if (xmln.FirstChild.InnerText.ToString().Contains("a")) @H_301_13@ 9@H_301_13@ xmln.ParentNode.RemoveChild(xmln);@H_301_13@ 10@H_301_13@ }
记得在最后要保存修改的:
xmldoc.Save(@"test.xml"@H_301_13@@H_301_13@@H_301_13@);@H_301_13@@H_301_13@@H_301_13@

猜你在找的XML相关文章