2011-02-08 34 views
0

2つのXMLファイルをマージする際に問題があります。 両方のファイルを2つのオブジェクトにロードしました。両方のオブジェクトにターゲットノードがあり、マージしようとしました。ここで2つのXMLファイルをマージするLINQ

サンプルです:

var nodes1 = XResult1.Descendants("subject"); 
var nodes2 = XResult2.Descendants("subject"); 

//nodes1.Add(nodes2.Nodes()); 

// *マージするコード** 誰かがplsは私を助けることができます。事前に おかげで... BB

ここでは私のXResult1です:ここでは

 
<subjects> 
    <subject> 
     <node id="1"> 
      Hi 
     </node> 
     <node id="2"> 
      Hi again 
     </node> 
     <node id="3"> 
      Hi once more 
     </node> 
    </subject> 
</subjects> 

は私XResult2です:

 
<subjects> 
    <subject> 
     <node id="4"> 
      Hello 
     </node> 
     <node id="5"> 
      Hello again 
     </node> 
    </subject> 
</subjects> 

そして、私の最終的な結果は次のようになります。

 
<subjects> 
    <subject> 
     <node id="1"> 
      Hi 
     </node> 
     <node id="2"> 
      Hi again 
     </node> 
     <node id="3"> 
      Hi once more 
     </node> 
     <node id="4"> 
      Hello 
     </node> 
     <node id="5"> 
      Hello again 
     </node> 

    </subject> 
</subjects> 

答えて

3

を変更したい:

ここで

XResult1.Descendants("subject").FirstOrDefault(); 
XResult2.Descendants("subject").FirstOrDefault(); 

から

XResult1.Descendants("subjects").FirstOrDefault(); 
XResult2.Descendants("subjects").FirstOrDefault(); 

は、より完全な例である:あなたの答えの

XDocument document = XDocument.Load(@"C:\XResult1.xml"); 
XElement subjectElement = document.Descendants("subject").FirstOrDefault(); 

XDocument document2 = XDocument.Load(@"C:\XResult2.xml"); 
XElement subjectElement2 = document2.Descendants("subject").FirstOrDefault(); 

subjectElement.Add(subjectElement2.Nodes()); 
+0

@Russellです。ありがとうございました。私のシステムは、subjectElement.Add(subjectElement2.Nodes());でハングします。 – BumbleBee

+0

私はこれを行うのが良いと思っています。 – BumbleBee

+0

私が指摘したもう1つの事は.FirstOrDefault()は最初のだけを返しますが、実際には私はすべてが必要です。 – BumbleBee

0

あなたがsubject要素内の要素をマージしたい場合は、ツリーのさらに下に行くので、あなたのnodes1nodes2を設定する必要があります次へ:

XElement nodes2 = XResult2.Descendants("subjects").Descendants("subject").FirstOrDefault(); 
+0

最初の部分が正しくありません。 –

+0

@Russell McClureあなたは正しいです、何らかの理由で私はリストを考えていました。一定。 – vlad

+0

FirstOrDefault()は最初の要素のみを処理しますが、実際にはXResult2にはすべての要素が必要です。 – BumbleBee

関連する問題