博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一次删除多个XML节点(RemoveChild())
阅读量:4449 次
发布时间:2019-06-07

本文共 1826 字,大约阅读时间需要 6 分钟。

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 name12                 if (xn.Name == "test")13                 {14                     xmln.RemoveChild(xn);                15                 }16 17                 ////remove node by node's innertext18                 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");

 

转载于:https://www.cnblogs.com/alexzp/archive/2012/10/23/2735715.html

你可能感兴趣的文章
windows下python双系统安装
查看>>
递归--二叉树上的相同点
查看>>
Math数学函数
查看>>
1316 文化之旅 2012年NOIP全国联赛普及组
查看>>
左移运算符
查看>>
svn的分支
查看>>
爬虫必备—性能相关(异步非阻塞)
查看>>
H5 65-清除浮动方式一
查看>>
四旋翼姿态解算——基础理论及推导
查看>>
通过用户模型,对数据库进行增删改查操作
查看>>
redis安装使用配置
查看>>
C++数据文件存储与加载(利用opencv)
查看>>
[TensorFlow 2] [Keras] fit()、fit_generator() 和 train_on_batch() 分析与应用
查看>>
Java 编译错误:缺少返回语句
查看>>
leanote使用本地账户时,去掉待同步的小红点
查看>>
整理pandas操作
查看>>
REST-assured 2发送消息代码重构
查看>>
python-面向对象
查看>>
11 go并发编程-上
查看>>
操作DOM树
查看>>