如何从XmlNodeList中删除XmlNode

28 c# xml

我需要根据条件删除XmlNode.怎么做?

foreach (XmlNode drawNode in nodeList)
{
       //Based on a condition
       drawNode.RemoveAll();  //need to remove the entire node                      

}
Run Code Online (Sandbox Code Playgroud)

Fre*_*örk 60

这应该是你的诀窍:

for (int i = nodeList.Count - 1; i >= 0; i--)
{
    nodeList[i].ParentNode.RemoveChild(nodeList[i]);
}
Run Code Online (Sandbox Code Playgroud)

如果使用常规for循环进行循环,并将其"向后"循环,则可以随时删除项目.

更新:这是一个完整的示例,包括加载xml文件,定位节点,删除它们并保存文件:

XmlDocument doc = new XmlDocument();
doc.Load(fileName);
XmlNodeList nodes = doc.SelectNodes("some-xpath-query");
for (int i = nodes.Count - 1; i >= 0; i--)
{
    nodes[i].ParentNode.RemoveChild(nodes[i]);
}
doc.Save(fileName);
Run Code Online (Sandbox Code Playgroud)


Dan*_*und 4

您不能轻松地使用迭代器(foreach 语句)来删除节点。据我所知,您可以执行以下操作:

1) 在 foreach 循环中,保存应删除的所有元素的列表。然后循环遍历这些元素并删除它们。

2) 使用普通的 for 循环并跟踪删除一项后要访问的下一个元素。

编辑:当使用 for 循环时,请按照 Fredrik 建议的方式进行,向后循环。