Вы уже дали ответ сами - просто переместите вызовы Load
и Save
за пределы цикла. Мне не ясно, где у вас были проблемы с реализацией этого самостоятельно ...
Вы также можете сделать запрос немного проще:
XDocument document = XDocument.Load(fullFilePath);
foreach (String removeItem in removeItems)
{
var results = from item in document.Descendants(elementName)
where (string) item.Attribute(attributeName) == removeItem
select item;
results.ToList().ForEach(item => item.Remove());
}
document.Save(fullFilePath);
При этом используется тот факт, что преобразование из XAttribute
в string
возвращает ноль, если сама ссылка на атрибут равна нулю.
Вам даже не нужно использовать выражение запроса:
var results = document.Descendants(elementName)
.Where(item => (string) item.Attribute(attributeName) == removeItem);