2013-04-03 72 views
0

我有一個XDocument,我想從中刪除XElement從XDocument中刪除XElement錯誤

我試試這個代碼: -

XDocument XDoc = XDocument.Parse(XMLFile); 

    var PricedItineraryRemove = XDoc.Descendants("PricedItinerary"); 

    foreach (XElement xle in PricedItineraryRemove) 
    { 
     if (xle.Attribute("SequenceNumber").Value != SequenceNumber.ToString()) 
     { 
       xEle.Remove(); //this line giving error second time. 
     } 
    } 

xEle.Remove()工作正常第一次,但第二次給予System.InvalidOperationException例外。

+1

你給甚至不編譯代碼 - 你還沒有聲明'xEle'。您還應該提供*完整*異常詳細信息 - 我懷疑有一條有用的消息。 –

回答

3

嘗試使用此代碼與特定的屬性中刪除節點:

string sequenceNumberStr = SequenceNumber.ToString(); 

XDoc.Descendants("PricedItinerary") 
    .Where(node => (string)node.Attribute("SequenceNumber") != sequenceNumberStr) 
    .Remove(); 
+1

+1順便說一句我認爲'(字符串)node.Attribute(「SequenceNumber」)'會更安全 –

+1

@lazyberezovsky非常感謝 –

+0

@lazyberezovsky非常感謝它的工作。 –

3

PricedItineraryRemoveIEnumerable<XElement>這是懶洋洋地評估,當你開始foreach ING。現在,當您在此迭代過程中開始移除部分DOM時,此迭代器會變得混亂並死亡。 簡單的解決方案:添加.ToList()或.ToArray(),這樣的列表是預評估,沒有人能弄糊塗了:

foreach (XElement xle in PricedItineraryRemove.ToList()) 
+0

很高興看到你提供了它不起作用的原因。 – jhamu