Изменение атрибутов XML после удаления узла - C#

Узнай цену своей работы

Формулировка задачи:

Такая проблема
Листинг программы
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Animals>
  3. <Dinosaur ID="1">
  4. <Name>Раптор</Name>
  5. <Era>Юрский</Era>
  6. <Ves>1</Ves>
  7. <Heigth>1</Heigth>
  8. <Tip>Хищник</Tip>
  9. </Dinosaur>
  10. <Dinosaur ID="2">
  11. <Name>Раптор</Name>
  12. <Era>Юрский</Era>
  13. <Ves>1</Ves>
  14. <Heigth>1</Heigth>
  15. <Tip>Хищник</Tip>
  16. </Dinosaur>
  17. <Dinosaur ID="3">
  18. <Name>Раптор</Name>
  19. <Era>Юрский</Era>
  20. <Ves>1</Ves>
  21. <Heigth>1</Heigth>
  22. <Tip>Хищник</Tip>
  23. </Dinosaur>
  24. </Animals>
___________________________________________________________________________________________ Проблема в том , что я не знаю , как сделать так , чтобы при удалении , например второго тега Динозавр(с атрибутом 2) третий тег , менял свой атрибут на предшествующий, тоесть если я из семи , удаляю 5ый , надо , чтоб шестой стал пятым , а седьмой шестым.Можете кто-нибудь помочь, пожалуйста , а то я уже не знаю , как сделать (Чтоб ID менялись при удалении на -1)

Решение задачи: «Изменение атрибутов XML после удаления узла»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Xml.Serialization;
  6.  
  7. namespace Test
  8. {
  9.     public class Animals
  10.     {
  11.         [XmlElement("Dinosaur")]
  12.         public List<Dinosaur> Dinosaurs { get; set; }
  13.  
  14.         [XmlIgnore]
  15.         public string File { get; set; }
  16.  
  17.         public void UpdateIds()
  18.         {
  19.             for (int i = 0; i < Dinosaurs.Count; i++)
  20.             {
  21.                 Dinosaurs[i].Id = i + 1;
  22.             }
  23.         }
  24.  
  25.         public static Animals Load(string path)
  26.         {
  27.             XmlSerializer deser = new XmlSerializer(typeof(Animals));
  28.             using (var fs = new FileStream(path, FileMode.Open))
  29.             {
  30.                 Animals ani = (Animals)deser.Deserialize(fs);
  31.                 ani.File = path;
  32.                 return ani;
  33.             }
  34.         }
  35.  
  36.         public static void Save(Animals ani)
  37.         {
  38.             string dir = Path.GetDirectoryName(ani.File);
  39.  
  40.             if (!string.IsNullOrWhiteSpace(dir) && !Directory.Exists(dir))
  41.                 Directory.CreateDirectory(dir);
  42.  
  43.             XmlSerializer ser = new XmlSerializer(typeof(Animals));
  44.             XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
  45.             namespaces.Add(string.Empty, string.Empty);
  46.             using (var fs = new FileStream(ani.File, FileMode.Create))
  47.                 ser.Serialize(fs, ani, namespaces);
  48.         }
  49.     }
  50.  
  51.     public class Dinosaur
  52.     {
  53.         [XmlAttribute("ID")]
  54.         public int Id { get; set; }
  55.         [XmlElement]
  56.         public string Name { get; set; }
  57.         [XmlElement]
  58.         public string Era { get; set; }
  59.         [XmlElement("Ves")]
  60.         public string Weight { get; set; }
  61.         [XmlElement("Heigth")]
  62.         public string Height { get; set; }
  63.         [XmlElement("Tip")]
  64.         public string Type { get; set; }
  65.     }
  66.  
  67.     static class Program
  68.     {
  69.         /// <summary>
  70.         /// The main entry point for the application.
  71.         /// </summary>
  72.         [STAThread]
  73.         static void Main(string[] args)
  74.         {
  75.             var ani = Animals.Load("test1.xml");
  76.  
  77.             ani.Dinosaurs.Add(new Dinosaur() { Era = "XXX", Height = "128", Id = 9999, Name = "йцукен", Type = "-1", Weight = "100500" });
  78.  
  79.             ani.UpdateIds();
  80.  
  81.             Animals.Save(ani);
  82.         }
  83.     }
  84. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут