我可以使用
删除xml节点 XmlNode node = newsItem.SelectSingleNode("XYZ");
node.ParentNode.RemoveChild(node);
但是,如果我想一次删除多个节点,例如XYZ,ABC,PQR
?
有没有办法一次删除所有这些节点,还是我必须逐个删除它们?
注意: XYZ,ABC,PQR
处于同一级别(即他们都拥有相同的父级)
答案 0 :(得分:4)
使用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,则情况可能会有所不同。
答案 1 :(得分:2)
认为你可以使用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();
答案 2 :(得分:1)
这在很大程度上取决于结构(嵌套)等。
但基本上是的,对于一些不相关的元素,一次选择并删除它们。
你可以在某种程度上将它们结合起来:
List<string> RemoveNames = ...
var toBeRemoved = doc.Descendants().Where(d => RemoveNames.Contains(d.name));
foreach (var element in toBeRemoved.ToList()) ...