很好的一篇文章:
原文地址: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 == test13 { 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 5 {
6 7 {
8 xn.ParentNode.RemoveChild(xn);
9 removed = true;
10 break;
11 }
12 }
13
14 if (!removed)
15 16 }