我需要使用LINQ加入两个XML文档,我不知道从哪里开始。我需要在EmailAddress节点的值上加入文档1和文档2,并创建一个包含文档2中状态字段值的最终输出文档。
有人可以帮忙吗?
文件1
文件2
最终文件
答案 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
;它不会创建新的XElement
或XDocument
。我添加了Char.IsDigit
检查,以避免错误地匹配不以数字结尾的EmailAddress
字段(如果存在)。如果您确定永远不会出现这种情况,那么您可以从查询中删除该检查。