很好的一篇文章:
原文地址:http://www.cnblogs.com/alexzp/archive/2012/10/23/2735715.html
1).(删除某一个指定的节点):
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@ }
这样只能删除找到的第一个与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@ }