Присоединяйтесь к XML-документам по значению с помощью LINQ - PullRequest
1 голос
/ 30 января 2011

Мне нужно объединить два XML-документа, используя LINQ, и я не уверен, с чего начать. Мне нужно объединить Документ 1 и Документ 2 со значениями узлов EmailAddress и создать окончательный выходной документ, который содержит значение поля состояния из Документа 2.

Кто-нибудь может помочь?

Документ 1

enter image description here

Документ 2

enter image description here

Итоговый документ

enter image description here

1 Ответ

0 голосов
/ 30 января 2011

Первый шаг - создать словарь для сопоставления писем со значениями их статуса.Затем выберите все элементы адреса электронной почты из первого документа и установите их атрибуты на основе словаря.

var dict = secondDoc.Descendants("EmailAddress")
                    .ToDictionary(e => e.Value, e => e.Attribute("status").Value);

var emails = firstDoc.Descendants()
                     .Where(e => e.Name.LocalName.StartsWith("EmailAddress") 
                       && Char.IsDigit(e.Name.LocalName[e.Name.LocalName.Length - 1]));

foreach (var email in emails)
{
    string attribute;
    if (dict.TryGetValue(email.Value, out attribute))
    {
        email.SetAttributeValue("status", attribute);
    }
}

При таком подходе непосредственно обновляется firstDoc;он не создает новый XElement или XDocument.Я добавил проверку Char.IsDigit, чтобы избежать неправильного сопоставления поля EmailAddress, которое не заканчивается числом, если оно существует.Если вы уверены, что этого никогда не произойдет, вы можете удалить эту проверку из запроса.

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