Изменение атрибутов XML после удаления узла - C#
Формулировка задачи:
Такая проблема
___________________________________________________________________________________________
Проблема в том , что я не знаю , как сделать так , чтобы при удалении , например второго тега Динозавр(с атрибутом 2) третий тег , менял свой атрибут на предшествующий, тоесть если я из семи , удаляю 5ый , надо , чтоб шестой стал пятым , а седьмой шестым.Можете кто-нибудь помочь, пожалуйста , а то я уже не знаю , как сделать (Чтоб ID менялись при удалении на -1)
<?xml version="1.0" encoding="utf-8"?>
<Animals>
<Dinosaur ID="1">
<Name>Раптор</Name>
<Era>Юрский</Era>
<Ves>1</Ves>
<Heigth>1</Heigth>
<Tip>Хищник</Tip>
</Dinosaur>
<Dinosaur ID="2">
<Name>Раптор</Name>
<Era>Юрский</Era>
<Ves>1</Ves>
<Heigth>1</Heigth>
<Tip>Хищник</Tip>
</Dinosaur>
<Dinosaur ID="3">
<Name>Раптор</Name>
<Era>Юрский</Era>
<Ves>1</Ves>
<Heigth>1</Heigth>
<Tip>Хищник</Tip>
</Dinosaur>
</Animals>
Решение задачи: «Изменение атрибутов XML после удаления узла»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Serialization;
namespace Test
{
public class Animals
{
[XmlElement("Dinosaur")]
public List<Dinosaur> Dinosaurs { get; set; }
[XmlIgnore]
public string File { get; set; }
public void UpdateIds()
{
for (int i = 0; i < Dinosaurs.Count; i++)
{
Dinosaurs[i].Id = i + 1;
}
}
public static Animals Load(string path)
{
XmlSerializer deser = new XmlSerializer(typeof(Animals));
using (var fs = new FileStream(path, FileMode.Open))
{
Animals ani = (Animals)deser.Deserialize(fs);
ani.File = path;
return ani;
}
}
public static void Save(Animals ani)
{
string dir = Path.GetDirectoryName(ani.File);
if (!string.IsNullOrWhiteSpace(dir) && !Directory.Exists(dir))
Directory.CreateDirectory(dir);
XmlSerializer ser = new XmlSerializer(typeof(Animals));
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
using (var fs = new FileStream(ani.File, FileMode.Create))
ser.Serialize(fs, ani, namespaces);
}
}
public class Dinosaur
{
[XmlAttribute("ID")]
public int Id { get; set; }
[XmlElement]
public string Name { get; set; }
[XmlElement]
public string Era { get; set; }
[XmlElement("Ves")]
public string Weight { get; set; }
[XmlElement("Heigth")]
public string Height { get; set; }
[XmlElement("Tip")]
public string Type { get; set; }
}
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
var ani = Animals.Load("test1.xml");
ani.Dinosaurs.Add(new Dinosaur() { Era = "XXX", Height = "128", Id = 9999, Name = "йцукен", Type = "-1", Weight = "100500" });
ani.UpdateIds();
Animals.Save(ani);
}
}
}