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