我需要从C#中的XML文件中删除所有特定节点。 为此,我选择了所有带有Xpath查询的节点,并尝试了以下代码:
XmlNodeList nodeList = xml.SelectNodes("//Test");
foreach (XmlNode node in nodeList)
{
node.ParentNode.RemoveChild(node);
}
质量检查表明,执行上述代码后,XML文件中仍存在<Test>
个节点。
我做错了什么?我该如何从XML文档中删除所有指定的节点?
答案 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]);
}