Изменение атрибутов 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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д