0

I have problem merging two XML files. I loaded both files into two objects, located the target nodes in both objects and tried to merge.

Here is a sample:

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

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

//* Code to merge** Can somebody pls help me. Thanks in advance... BB

Here is my XResult1:

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

Here is my XResult2 :

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

And my final Result should be :

<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>
BumbleBee
  • 10,429
  • 20
  • 78
  • 123

2 Answers2

3

You want to change:

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

to

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

Here is a more complete example:

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());
Russell McClure
  • 4,821
  • 1
  • 22
  • 22
0

If you want to merge the elements inside the subject element, you need to go down further in the tree, so set your nodes1 and nodes2 to the following:

XElement nodes2 = XResult2.Descendants("subjects").Descendants("subject").FirstOrDefault();
vlad
  • 4,748
  • 2
  • 30
  • 36
  • @Russell McClure you're right, for some reason I was thinking about lists. fixed. – vlad Feb 08 '11 at 21:14
  • FirstOrDefault() yeilds only the first element but actually I need all the elments in XResult2. – BumbleBee Feb 08 '11 at 21:42
  • @BumbleBee your XML files show that you have only one `` element, which in turn has many `` elements – vlad Feb 08 '11 at 23:37