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

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

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

Такая проблема
<?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>
___________________________________________________________________________________________ Проблема в том , что я не знаю , как сделать так , чтобы при удалении , например второго тега Динозавр(с атрибутом 2) третий тег , менял свой атрибут на предшествующий, тоесть если я из семи , удаляю 5ый , надо , чтоб шестой стал пятым , а седьмой шестым.Можете кто-нибудь помочь, пожалуйста , а то я уже не знаю , как сделать (Чтоб ID менялись при удалении на -1)

Решение задачи: «Изменение атрибутов 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);
        }
    }
}

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


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

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

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