Linq Xml - поиск атрибутов по значению - PullRequest
0 голосов
/ 12 марта 2012

Если у меня есть простой XML-документ, такой как

<case id="37d3c93c-3201-4002-b24f-08e1221c3cb7">
    <party id="26dad8c5-9487-48f2-8911-1d78c00095b2">...</party>
    <illustration CaseId="37d3c93c-3201-4002-b24f-08e1221c3cb7">....</illustration>
    <illustration CaseId="37d3c93c-3201-4002-b24f-08e1221c3cb7">....</illustration>
    <item relatedCaseId="37d3c93c-3201-4002-b24f-08e1221c3cb7">...</illustration>
</case>

, у меня есть код, который изменяет атрибут id элемента case.Сейчас я ищу какой-нибудь LINQ-код, который помог бы мне найти все элементы, у которых есть значение атрибута, совпадающее со старым значением, чтобы я мог заменить его новым значением.У меня нет списка имен атрибутов, и мне нужно будет выполнить поиск по всему документу.

Какие-либо советы / идеи?Спасибо!

1 Ответ

2 голосов
/ 12 марта 2012

Примерно так:

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, чтобы избежать путаницы. (Конечно, это необходимо, когда вы удаляете элемент или что-то в этом роде - просто установка значения атрибута , вероятно, никак не повлияет.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...