如何一次删除多个XML节点?

时间:2012-10-15 13:00:49

标签: c# xml

我可以使用

删除xml节点
 XmlNode node = newsItem.SelectSingleNode("XYZ");
 node.ParentNode.RemoveChild(node);

但是,如果我想一次删除多个节点,例如XYZ,ABC,PQR

,该怎么办?

有没有办法一次删除所有这些节点,还是我必须逐个删除它们?

注意: XYZ,ABC,PQR处于同一级别(即他们都拥有相同的父级)

3 个答案:

答案 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()) ...