![](/img/trans.png)
[英]How can I print multiple nodes with same name under different parent nodes in an XML doc?
[英]How can I remove multiple XML nodes at once?
我可以使用删除XML节点
XmlNode node = newsItem.SelectSingleNode("XYZ");
node.ParentNode.RemoveChild(node);
但是,如果我想一次删除多个节点,例如XYZ,ABC,PQR
怎么办?
有什么方法可以一次删除所有这些节点,还是必须一个一个地删除它们?
注意: XYZ,ABC,PQR
处于同一级别(即,它们都具有相同的父对象)
使用XmlDocument
API时不会内置任何内容,但是您可以编写实用程序扩展方法,例如:
public static void Remove(this XmlNode node, string xpath)
{
var nodes = node.SelectNodes(xpath);
foreach (XmlNode match in nodes)
{
match.ParentNode.RemoveChild(match);
}
}
然后致电:
newsItem.Remove("XYZ|ABC|PQR");
如果可以更改为XDocument
API,则情况可能会有所不同。
认为您可以使用linq to xml做类似的事情。
var listOfNodesToRemove = new[]{"XYZ", "ABC", "PQR"};
var document = XDocument.Load(<pathtoyourfile>);
document.Descendants
.Where(m => listOfNodesToRemove.Contains(m.Name.ToString())
.Nodes()
.Remove();
那在很大程度上取决于结构(嵌套)等。
但基本上是的,对于少数不相关的元素,一次选择并删除一个即可。
您可以在一定程度上组合它们:
List<string> RemoveNames = ...
var toBeRemoved = doc.Descendants().Where(d => RemoveNames.Contains(d.name));
foreach (var element in toBeRemoved.ToList()) ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.