создание "соединения" для обновления одного XElement с другого XElement - PullRequest
3 голосов
/ 07 июля 2011

У меня есть XElement, называемый "XUsers", который будет содержать XML, который выглядит следующим образом:

<users>
   <user id="12345" name="Bob Smith" />
   <user id="67890" name="Jamal Stevens" />
   <user id="54321" name="Mary Jones" />
</users>

... и другой XElement, называемый "XTasks", который будет содержать данные, подобные этому:

<tasks>
   <task id="1" title="Task 1" ownerId="54321" />
   <task id="2" title="Task 2" ownerId="12345" />
   <task id="3" title="Task 3" ownerId="67890" />
</tasks>

Я хочу добавить атрибут ("ownerName") к элементам задачи во втором XElement (XTasks) и установить его значения в соответствии с "объединением" с первым XElement (XUsers).Итак, мой окончательный результат будет таким: XML в XTask будет выглядеть так:

<tasks>
   <task id="1" title="Task 1" ownerId="54321" ownerName="Mary Jones" />
   <task id="2" title="Task 2" ownerId="12345" ownerName="Bob Smith" />
   <task id="3" title="Task 3" ownerId="67890" ownerName="Jamal Stevens" />
</tasks>

Возможно ли это с помощью Linq?Я не смог найти каких-либо примеров такого рода операций в Интернете.Какой самый эффективный способ сделать это в моем коде ASP.NET (C #)?

Спасибо за любой совет, который вы можете дать.

1 Ответ

1 голос
/ 07 июля 2011

Я делаю это без какой-либо IDE передо мной, так что простите меня за любые ошибки ..

 foreach (XElement task in XTasks.Elements())
 {
     XElement userNode = XUsers.Elements().Where(
        e => e.Attribute("id").Value == task.Attribute("ownerId").Value).FirstOrDefault();
     if (userNode != null)
     {
        task.Attribute("ownerName").SetValue(userNode.name);
     }
 }
...