0

I have been using the following SO, How to merge two XmlDocuments in C#, to try and merge two sample xml files into one. Essentially here are my two xml files

test1.xml:

<root>
    <Name>
        <id>4</id>
        <First_name>Tony</First_name>
        <last_name>""</last_name>
    </Name>
    <Name>
        <id>6</id>
        <First_name>Donny</First_name>
        <last_name>Test</last_name>
        <middle_name>Ward</middle_name>
    </Name>
</root>

And test2.xml

<root>
    <Name>
        <id>1</id>
        <First_name>Nick</First_name>
        <last_name>Tester</last_name>
    </Name>
    <Name>
        <id>2</id>
        <First_name>Lauren</First_name>
        <last_name>MsTester</last_name>
    </Name>
</root>

I am using this code snippet it to merge the into the one file but the procedure is not actually combining them. I am a little knew to xmlDocument class and still trying to navigate this issue correctly.

Code:

XmlDocument xmlreader1 = new XmlDocument();
xmlreader1.Load("C:\\Temp\\test1.xml");
XmlDocument xmlreader2 = new XmlDocument();
xmlreader2.Load("C:\\Temp\\test2.xml");

foreach (XmlNode node in xmlreader2.DocumentElement.ChildNodes)
{
    XmlNode importedDocument = xmlreader1.ImportNode(node, true);
    xmlreader1.DocumentElement.AppendChild(importedDocument);
}

I believe this is correct to take each child node of root (in this case <name>) from test2.xml and append it to test1.xml. I have also tried as:

XmlNode importedDocument = xmlreader1.ImportNode(xmlreader2.DocumentElement, true);
xmlreader1.DocumentElement.AppendChild(importedDocument);

to no avail again any suggestions would be greatly appreciated.

Community
  • 1
  • 1
ndrake
  • 3
  • 1
  • Do you particularly *need* to use `XmlDocument`? LINQ to XML is generally simpler to use. Also, please take more care formatting your post - look at the preview and only submit when the question looks how you'd want it to look if you were trying to answer it. – Jon Skeet Oct 22 '14 at 06:06

1 Answers1

0

It's not entirely clear what merge operations you need to perform - but if you just need to copy the root node's child elements, that's really simple with LINQ to XML:

XDocument doc1 = XDocument.Load("test1.xml");
XDocument doc2 = XDocument.Load("test2.xml");
doc1.Root.Add(doc2.Root.Elements());
doc1.Save("test3.xml");

This will not perform any actual merging though - if you have elements with the same ID in both files, you'll end up with both elements in the result, rather than one merged element.

Personally I always prefer using LINQ to XML over the old XmlDocument API - I would strongly recommend using it when you have the opportunity to do so.

Jon Skeet
  • 1,421,763
  • 867
  • 9,128
  • 9,194