here:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
namespace Test_XmlChange
{
class Program
{
static void Main(string[] args)
{
try
{
Queue<XElement> duplicated = new Queue<XElement>();
Queue<int> missing = new Queue<int>();
XDocument d = XDocument.Load("XMLFile1.xml");
var cs = d.Descendants("all").First().Descendants().OrderBy(i =>
int.Parse(i.Attribute("id").Value)).ToList();
int lastId = -1;
int id;
for (int i = 0; i < cs.Count(); i++)
{
id = int.Parse(cs[i].Attribute("id").Value);
if (id == lastId)
{
if (missing.Count > 0)
cs[i].Attribute("id").Value = missing.Dequeue().ToString();
else
duplicated.Enqueue(cs[i]);
}
if (id - lastId > 1)
{
for (int j = lastId + 1; j < id; j++)
{
if (duplicated.Count > 0)
duplicated.Dequeue().Attribute("id").Value = j.ToString();
else
missing.Enqueue(j);
}
}
lastId = id;
}
d.Save("XMLFile_out.xml");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
}