I have a requirement to update xml file by reading another xml file.
eg:
Source.xml
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="package1" version="1.0.26.0"/>
  <package id="package3" version="1.0.12.0"/>
  <package id="package4" version="1.0.40.0"/>
  <package id="package12" version="1.0.38.0"/>
  <package id="package6" version="1.0.8.0"/>
</packages>
Target.xml
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="package1" version="1.0.2.0"/>
  <package id="package2" version="1.0.1.0"/>
  <package id="package3" version="1.0.4.0"/>
  <package id="package4" version="1.0.3.0"/>
</packages>
In the above example, "package1" exists in both the files. So the version of "package1" in Target.xml has to get update with the value in Source.xml.
I tried the below code, but encountered exception during execution(no error during compilation):
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace XMLUpdate
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("In Execute..");
            string SourceFile = args[0];
            string TargetFile = args[1];
            string SourcePackageId = null;
            string SourcePackageVersion = null;
            XmlDocument SourceXmlDoc = new XmlDocument();
            XmlDocument TargetXmlDoc = new XmlDocument();
            SourceXmlDoc.Load(SourceFile);
            TargetXmlDoc.Load(TargetFile);
            XmlElement SourceRootElement = SourceXmlDoc.DocumentElement;
            //XmlElement SourceElement = SourceRootElement["packages"];
            XmlNodeList SourcexnList = SourceXmlDoc.SelectNodes("/packages");
            foreach (XmlNode Sourcexn in SourcexnList)
            {
                Console.WriteLine("In source loop..");
                SourcePackageId = Sourcexn["id"].InnerText;
                SourcePackageVersion = Sourcexn["version"].InnerText;
                Console.WriteLine("In source loop SourcePackageId.." + SourcePackageId);
                XmlElement TargetRootElement = TargetXmlDoc.DocumentElement;
                XmlNodeList TargetxnList = TargetXmlDoc.SelectNodes("/packages");
                foreach (XmlNode Targetxn in TargetxnList)
                {
                    Console.WriteLine("In Target loop..");
                    string TargetPackageId = Targetxn["id"].InnerText;
                    //string TargetPackageVersion = Targetxn["version"].InnerText;
                    if (SourcePackageId.Equals(TargetPackageId))
                    {
                        Targetxn["version"].InnerText = SourcePackageVersion;
                    }
                }
            }
        }
    }
}
Any help?
Thanks
 
     
    