2011-01-29 8 views
1

LINQを使用して2つのXML文書を結合する必要があります。どこから開始するのか分かりません。ドキュメント1とドキュメント2をEmailAddressノードの値に参加させ、ドキュメント2のステータスフィールドの値を含む最終出力ドキュメントを作成する必要があります。LINQを使用して値にXML文書を結合する

誰でも手助けできますか?

文献1

enter image description here

文献2

enter image description here

最終文書の最初のステップで作成することである

enter image description here

+0

XMLをテキストとして投稿するとすばらしいことになりました。イメージは、人々が時間を無駄にしてコード/データを再構築しようとします。 –

+0

申し訳ありません。私はXMLを投稿しようとしましたが、エディタはそれを受け取りませんでした。 – user135498

答えて

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フィールドが誤って一致するのを避けました。決してそうでないことが確かな場合は、そのチェックをクエリから削除することができます。

+0

素敵な仕事!!!非常に雄弁とそれは完全に働いた。ありがとうございました。 – user135498

+0

@ user135498 great :)文字列のインデックスと長さを使って最後の文字にアクセスするために 'IsDigit'チェックをわずかに更新しました。' Last'は文字列全体を繰り返します。 –

関連する問題