Примерно так:
var matches = doc.Descendants()
.Where(x => x.Attributes()
.Any(attr => attr.Value == oldValue));
Или, если вы просто пытаетесь заменить значения, вам нужны только сами атрибуты:
var attributes = doc.Descendants()
.Attributes()
.Where(attr => attr.Value == oldValue)
.ToList();
foreach (var attribute in attributes)
{
attribute.Value = newValue;
}
Вполне возможно, что в этом случае копирование в список не требуется, но я обычно предпочитаю делать копию, изменяя XDocument
, чтобы избежать путаницы. (Конечно, это необходимо, когда вы удаляете элемент или что-то в этом роде - просто установка значения атрибута , вероятно, никак не повлияет.)