创建“连接”以从另一个XElement更新一个XElement

时间:2011-07-07 14:07:29

标签: c# asp.net linq-to-xml xelement

我有一个名为“XUsers”的XElement,它将包含如下所示的XML:

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

...和另一个名为“XTasks”的XElement,它将包含如下数据:

<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>

我想在第二个XElement(XTasks)中的任务元素中添加一个属性(“ownerName”),并根据与第一个XElement(XUsers)的“join”设置其值。所以,我的最终结果是XTask中的XML将如下所示:

<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 个答案:

答案 0 :(得分:1)

我这样做没有任何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);
     }
 }