1

我有一个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异常。

4

2 回答 2

5

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

string sequenceNumberStr = SequenceNumber.ToString();

XDoc.Descendants("PricedItinerary")
    .Where(node => (string)node.Attribute("SequenceNumber") != sequenceNumberStr)
    .Remove();
于 2013-04-03T12:46:25.200 回答
3

ThePricedItineraryRemove是一个IEnumerable<XElement>在你开始foreaching 时被懒惰评估的。现在,当您在此迭代期间开始删除部分 DOM 时,此迭代器会变得混乱并死掉。简单的解决方案:添加一个 .ToList() 或 .ToArray() 以便预先评估列表并且没有人可以再混淆:

foreach (XElement xle in PricedItineraryRemove.ToList())
于 2016-01-14T21:02:36.177 回答