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