我有一个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
例外。
答案 0 :(得分:4)
尝试使用此代码删除具有特定属性的节点:
string sequenceNumberStr = SequenceNumber.ToString();
XDoc.Descendants("PricedItinerary")
.Where(node => (string)node.Attribute("SequenceNumber") != sequenceNumberStr)
.Remove();
答案 1 :(得分:3)
PricedItineraryRemove
是IEnumerable<XElement>
,当你开始foreach
时,它会被懒惰地评估。现在,当你在这次迭代中开始删除部分DOM时,这个迭代器会变得混乱并死掉。
简单的解决方案:添加一个.ToList()或.ToArray(),以便预先评估列表,不再有人可能会混淆:
foreach (XElement xle in PricedItineraryRemove.ToList())