如何从XElement中删除特定节点?
我创建了一个带有节点的XElement,它具有如下XML。
我想删除所有“ 规则 ”节点,如果它们包含“ 条件 ”节点。
我创建一个for循环,如下所示,但它不会删除我的节点
foreach (XElement xx in xRelation.Elements()) { if (xx.Element("Conditions") != null) { xx.Remove(); } }
样品:
如果它们包含“ 条件 ”节点,如何删除所有“ 规则 ”节点?
你可以尝试这种方法:
var nodes = xRelation.Elements().Where(x => x.Element("Conditions") != null).ToList(); foreach(var node in nodes) node.Remove();
基本思路:您无法删除当前正在迭代的集合元素。
首先,您必须创建要删除的节点列表,然后删除这些节点。
你可以使用Linq:
xRelation.Elements() .Where(el => el.Elements("Conditions") == null) .Remove();
或者创建要删除的节点的副本,然后删除它们(如果第一种方法不起作用):
List nodesToDelete = xRelation.Elements().Where(el => el.Elements("Conditions") == null).ToList(); foreach (XElement el in nodesToDeletes) { // Removes from its parent, but not nodesToDelete, so we can use foreach here el.Remove(); }
我为你做了一个小例子:
上述就是C#学习教程:如何从XElement中删除特定节点?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
XDocument document = XDocument.Parse(GetXml()); var rulesNode = document.Element("Rules"); if (rulesNode != null) { rulesNode.Elements("Rule").Where(r => r.Element("Conditions") != null).Remove(); }
passiveLead.DataXml.Descendants("Conditions").Remove();
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1023621.html