2011-07-05 22 views
0

我試圖通過循環來從xml文檔中刪除特定的節點。這是我曾嘗試過的:XmlNode.RemoveChild()方法不能按預期方式工作

foreach (XmlNode node in doc.ChildNodes) { 
    if (node.Name == "EmbeddedResource" && node.Attributes["Include"].Value.Contains(".resx")) { 
      node.ParentNode.RemoveChild(node); 
    } 
} 

執行此代碼時沒有任何反應。也沒有例外。我搜索了一下,發現了一些解決方法,使用SelectSingleNode方法,但它需要XPath作爲輸入參數,在我看來這太複雜了,因爲我已經有了我想要的節點。這是怎麼樣子(順便說一下,我不能讓它工作,因爲有什麼不對我的XPath):

parentNode.RemoveChild(parentNode.SelectSingleNode("//" + parentNode.Name + "/" + node.Name + "[@Include='" + node.Attributes["Include"].Value + "']")); 

爲什麼這個方法表現也是這樣嗎? 有沒有辦法以不同的方式做到這一點?

謝謝你是進步

回答

1

既然你是通過迭代doc.ChildNodes,你爲什麼不使用doc.RemoveChild(節點)?

此外,可能存在一個問題,即您正在迭代列表,同時從列表中刪除項目 - 我不知道C#如何處理該列表。例如,您可以在您的原始foreach中存儲要刪除的臨時節點列表,然後遍歷臨時列表以刪除文檔中的項目。

+0

臨時清單工作。正如你所說,我想問題是遍歷一個列表並嘗試從它移除項目。謝謝。 – Vale

+0

奇怪的是,沒有例外拋出! – GeoffM