使用LINQ在Value上加入XML文档

时间:2011-01-29 22:04:46

标签: xml linq join

我需要使用LINQ加入两个XML文档,我不知道从哪里开始。我需要在EmailAddress节点的值上加入文档1和文档2,并创建一个包含文档2中状态字段值的最终输出文档。

有人可以帮忙吗?

文件1

enter image description here

文件2

enter image description here

最终文件

enter image description here

1 个答案:

答案 0 :(得分:0)

第一步是创建一个字典,将电子邮件映射到其状态值。接下来,从第一个文档中选择所有电子邮件地址元素,并根据字典设置其属性。

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;它不会创建新的XElementXDocument。我添加了Char.IsDigit检查,以避免错误地匹配不以数字结尾的EmailAddress字段(如果存在)。如果您确定永远不会出现这种情况,那么您可以从查询中删除该检查。