从XDocument错误中删除XElement

时间:2013-04-03 12:43:50

标签: c# asp.net xml linq-to-xml

我有一个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例外。

2 个答案:

答案 0 :(得分:4)

尝试使用此代码删除具有特定属性的节点:

string sequenceNumberStr = SequenceNumber.ToString();

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

答案 1 :(得分:3)

PricedItineraryRemoveIEnumerable<XElement>,当你开始foreach时,它会被懒惰地评估。现在,当你在这次迭代中开始删除部分DOM时,这个迭代器会变得混乱并死掉。 简单的解决方案:添加一个.ToList()或.ToArray(),以便预先评估列表,不再有人可能会混淆:

foreach (XElement xle in PricedItineraryRemove.ToList())