我可以使用删除 xml 节点
XmlNode node = newsItem.SelectSingleNode("XYZ");
node.ParentNode.RemoveChild(node);
但是,例如,如果我想一次删除多个节点XYZ,ABC,PQR
怎么办?
有没有办法一次删除所有这些节点,还是我必须一个一个地删除它们?
注意: XYZ,ABC,PQR
处于同一级别(即他们都有相同的父级)
使用 API 时没有内置任何内容XmlDocument
,但您可以编写实用程序扩展方法,例如:
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()) ...