如何从C#中的XML文档中删除所有特定节点?

时间:2016-11-28 00:06:42

标签: c# xml xpath foreach

我需要从C#中的XML文件中删除所有特定节点。 为此,我选择了所有带有Xpath查询的节点,并尝试了以下代码:

XmlNodeList nodeList = xml.SelectNodes("//Test");  
foreach (XmlNode node in nodeList)  
{
    node.ParentNode.RemoveChild(node);
}

质量检查表明,执行上述代码后,XML文件中仍存在<Test>个节点。

我做错了什么?我该如何从XML文档中删除所有指定的节点?

1 个答案:

答案 0 :(得分:0)

我上面发布的代码说明了许多工程师的常见错误。我在严肃的企业后端找到了foreach的代码。

我们应该记住:

  

foreach语句用于遍历集合以获取   您想要的信息,但不能用于添加或删除   来自源集合的项目,以避免不可预测的副作用。   如果需要在源集合中添加或删除项目,请使用   for循环。   Read more about foreach on MSDN

这段代码的正确版本:

for (int i = 0; i < nodeList.Count; i++)  
{
    nodeList[i].ParentNode.RemoveChild(nodeList[i]);
}