在下面的代碼中,我使用foreach循環來檢查nodelist中的每個節點並刪除其中的一些節點。 我刪除了一個節點後,foreach循環出現以下錯誤: 「元素列表已更改,枚舉操作無法繼續」。 我該如何避免它?如何在foreach循環中刪除xmlnode?
public static XmlNodeList Scan(XmlNodeList nodeList)
{
string elementValue = null;
foreach (XmlNode xmlElement in nodeList)
{
elementValue = xmlElement.InnerText;
if (elementValue.Length >= 6 && elementValue.Substring(0, 3) == "999")
{
continue;
}
else
{
XmlNode node = xmlElement.ParentNode;
node.RemoveChild(xmlElement);
}
}
return nodeList;
}
感謝您的回答。這個方法引發了另一個問題,現在當我刪除一個節點時,它也刪除了它的所有子節點,這可能是一個問題。 –
當然,你必須適應你的需要,並把你想要的條件放在那裏。我編寫的例子只是爲了展示如何在for循環中編輯集合,而在foreach中編輯集合不起作用。如果刪除一個節點也刪除了它的所有子節點,那麼它將使用任何解決方案來完成它。這取決於你想要對子女做什麼。你是否想重新將它們添加到你正在解析的集合中,就像你只是在拼湊一個hiearchy? – LightStriker
我需要保留一些sub childer在同一個節點列表中,以便以後我可以提取元素值和路徑供以後使用。 我想刪除其他元素而不是創建新列表的原因是,在新列表中,我將失去元素的原始xpath。 –