2

我可以使用删除 xml 节点

 XmlNode node = newsItem.SelectSingleNode("XYZ");
 node.ParentNode.RemoveChild(node);

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

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

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

4

3 回答 3

4

使用 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");

如果您可以更改为XDocumentAPI,那么情况可能会有所不同。

于 2012-10-15T13:06:22.830 回答
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();
于 2012-10-15T13:05:51.843 回答
1

这在很大程度上取决于结构(嵌套)等。

但基本上是的,对于少数不相关的元素,一次选择并删除它们。

您可以在某种程度上将它们结合起来:

List<string> RemoveNames = ...
var toBeRemoved = doc.Descendants().Where(d => RemoveNames.Contains(d.name));
foreach (var element in toBeRemoved.ToList()) ...
于 2012-10-15T13:04:14.487 回答