简体   繁体   中英

I am trying to merge two xml files,but facing some issues

Xml File 1-

<?xml version="1.0" encoding="utf-8"?>
<Employees>
  <Employee Id="1">    
    <FirstName>Aa</FirstName>
    <LastName>PDC1</LastName>
    <Salary>
      <subsal>1</subsal>
    </Salary>
  </Employee>
 <Employee Id="2">    
    <FirstName>Bb</FirstName>
    <LastName>PDC2A</LastName>
    <Salary>
      <subsal>2</subsal>
    </Salary>
  </Employee>
  <Employee Id="3">    
    <FirstName>Cc</FirstName>
    <LastName>PDC2B</LastName>
    <Salary>
      <subsal>3</subsal>
    </Salary>
  </Employee>
</Employees>

XML file 2-:

<?xml version="1.0" encoding="utf-8"?>
<Employees>
  <Employee Id="1">    
    <FirstName>AaA</FirstName>
    <LastName>PDC1</LastName>
    <Salary>
      <subsal>4</subsal>
    </Salary>    
  </Employee>
 <Employee Id="2">    
    <FirstName>BbB</FirstName>
    <LastName>PDC2A</LastName>
    <Salary>
      <subsal>5</subsal>
    </Salary>
  </Employee>
 </Employees>

I have to merge these Files into one and I used the following code-:

using System;
using System.Xml;
using System.IO;
using System.Data;

namespace merge_xml
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                XmlTextReader xmlreader1 = new XmlTextReader("C:\\Users\\saket.parasar.jha\\s.xml");
                XmlTextReader xmlreader2 = new XmlTextReader("C:\\Users\\saket.parasar.jha\\s1.xml");

                DataSet ds = new DataSet();
                ds.ReadXml(xmlreader1);

                DataSet ds2 = new DataSet();
                ds2.ReadXml(xmlreader2);

                ds.Merge(ds2);

                Console.WriteLine("Completed merging XML documents");

                ds.WriteXml("C:\\Users\\saket.parasar.jha\\sneww.xml");

                ////XmlDocument doc = new XmlDocument();
                ////doc.Load(("C:\\Users\\saket.parasar.jha\\sneww.xml"));
                ////XmlNodeList nodes = doc.SelectNodes("//product/id");
                //////int nNodeID = nodes.Count;
                ////nNodeID++;
            }

            catch (System.Exception ex)
            {
                Console.Write(ex.Message);
            }
            Console.Read(); 
        }
    }
}

output I am getting is-:

<?xml version="1.0" standalone="yes"?>
<Employees>
  <Employee Id="1">
    <FirstName>AaA</FirstName>
    <LastName>PDC1</LastName>
    <Salary>
      <subsal>1</subsal>
    </Salary>
    <Salary>
      <subsal>4</subsal>
    </Salary>
  </Employee>
  <Employee Id="2">
    <FirstName>BbB</FirstName>
    <LastName>PDC2A</LastName>
    <Salary>
      <subsal>2</subsal>
    </Salary>
    <Salary>
      <subsal>5</subsal>
    </Salary>
  </Employee>
  <Employee Id="3">
    <FirstName>Cc</FirstName>
    <LastName>PDC2B</LastName>
    <Salary>
      <subsal>3</subsal>
    </Salary>
  </Employee>
</Employees>

Also the required output should be-:

<?xml version="1.0" encoding="utf-8"?>
<Employees>
  <Employee Id="1">    
    <FirstName>Aa</FirstName>
    <LastName>PDC1</LastName>
    <Salary>
      <subsal>1</subsal>
    </Salary>
  </Employee>
 <Employee Id="2">    
    <FirstName>Bb</FirstName>
    <LastName>PDC2A</LastName>
    <Salary>
      <subsal>2</subsal>
    </Salary>
  </Employee>
  <Employee Id="3">    
    <FirstName>Cc</FirstName>
    <LastName>PDC2B</LastName>
    <Salary>
      <subsal>3</subsal>
    </Salary>
  </Employee>

<Employees>
  <Employee Id="4">    
    <FirstName>AaA</FirstName>
    <LastName>PDC1</LastName>
    <Salary>
      <subsal>4</subsal>
    </Salary>    
  </Employee>
 <Employee Id="5">    
    <FirstName>BbB</FirstName>
    <LastName>PDC2A</LastName>
    <Salary>
      <subsal>6</subsal>
    </Salary>
  </Employee>
 </Employees>

</Employees>

Should I try some other merging methods, if possible please suggest some code..

Modify XML file 2-: file like this:

<?xml version="1.0" encoding="utf-8"?>
<Employees>
   <Employee Id="4">    
       <FirstName>AaA</FirstName>
       <LastName>PDC1</LastName>
       <Salary>
          <subsal>4</subsal>
       </Salary>    
   </Employee>
   <Employee Id="5">    
       <FirstName>BbB</FirstName>
       <LastName>PDC2A</LastName>
       <Salary>
          <subsal>5</subsal>
       </Salary>
   </Employee>
</Employees>

Change the Employee Id , you will get what you want.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM