Удаление узла XML - C#

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

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

В общем имеется такой XML
<?xml version="1.0" encoding="utf-8"?>
<ServerTaskWorkerConfig>
  <!-- <Server uri="https://172.16.54.11/server/octopus_manager.soap" queryPause="200" modulePath="..\Local" packData="True"> -->
  <Server uri="tcp://172.16.54.11:2007/Octopus.Manager" queryPause="200" modulePath="..\Local" packData="True">
    <Projects>
      <Project id="3058" name="Р447Р-Р3" priority="1">
        <Task id="65" name="Сравнение цифр" priority="3" singleThreaded="False" />
        <Task id="66" name="Сравнение рубрик" priority="3" singleThreaded="False" />
        <Task id="67" name="ЗаглКопир" priority="1" singleThreaded="False" />
        <Task id="68" name="Регистрация заголовка" priority="1" singleThreaded="False" />
        <Task id="69" name="Регистрация" priority="1" singleThreaded="False" />
        <Task id="71" name="QA_Gate_рубрики" priority="1" singleThreaded="False" />
        <Task id="72" name="QA_Gate_цифры" priority="1" singleThreaded="False" />
        <Task id="84" name="Выгрузка в Тверь" priority="1" singleThreaded="False" />
        <Task id="73" name="QA_Gate_Заголовок" priority="1" singleThreaded="False" />
        <Task id="86" name="Загрузка" priority="1" singleThreaded="True" />
        <Task id="90" name="Сравнение примечания" priority="3" singleThreaded="False" />
        <Task id="87" name="Простановка признака" priority="3" singleThreaded="False" />
        <Task id="94" name="Стат.Загрузка" priority="1" singleThreaded="True" />
        <Task id="97" name="Копирование листов" priority="1" singleThreaded="False" />
        <Task id="98" name="Регистр Листов" priority="1" singleThreaded="False" />
      </Project>
      <Project id="3062" name="Р781Т-Р3" priority="1">
        <Task id="3" name="Загрузка из РК" priority="1" singleThreaded="True" />
        <Task id="6" name="Регистрация" priority="1" singleThreaded="False" />
        <Task id="20" name="Замена путей" priority="1" singleThreaded="False" />
        <Task id="8" name="Сравнение" priority="1" singleThreaded="False" />
        <Task id="10" name="Выгрузка для РК" priority="1" singleThreaded="False" />
      </Project>
      <Project id="3061" name="КП097Р-Р37_Доп" priority="1">
        <Task id="1" name="Регистрация" priority="1" singleThreaded="False" />
        <Task id="2" name="Объединение пачек" priority="1" singleThreaded="True" />
        <Task id="4" name="Перенос данных" priority="1" singleThreaded="False" />
      </Project>
      <Project id="3063" name="Р781Т-Р4" priority="1">
        <Task id="10" name="Загрузка ВП из РК" priority="1" singleThreaded="True" />
        <Task id="11" name="Регистрация ВП" priority="1" singleThreaded="False" />
        <Task id="14" name="Сравнение ВП" priority="1" singleThreaded="False" />
        <Task id="20" name="Сравнение" priority="1" singleThreaded="False" />
        <Task id="26" name="Загрузка УД из РК" priority="1" singleThreaded="True" />
        <Task id="27" name="Регистрация УД" priority="1" singleThreaded="False" />
        <Task id="29" name="Замена Путей" priority="1" singleThreaded="False" />
        <Task id="28" name="Выгрузка УД на РК" priority="1" singleThreaded="False" />
      </Project>
      <Project id="3060" name="КП097Р-Р37" priority="1">
        <Task id="2" name="Регистрация" priority="1" singleThreaded="False" />
        <Task id="3" name="Перенос данных" priority="1" singleThreaded="False" />
        <Task id="16" name="Регистрация соответствия" priority="1" singleThreaded="False" />
        <Task id="19" name="Признак для Ц" priority="1" singleThreaded="False" />
        <Task id="20" name="Признак для 2" priority="1" singleThreaded="False" />
      </Project>
      <Project id="3064" name="Р781Т-Р5" priority="1">
        <Task id="3" name="Загрузка" priority="1" singleThreaded="True" />
        <Task id="6" name="Регистрация" priority="1" singleThreaded="False" />
        <Task id="27" name="Сравнение ДВ_ПВ" priority="1" singleThreaded="False" />
        <Task id="34" name="ПризнакДоввда" priority="1" singleThreaded="False" />
      </Project>
      <Project id="3065" name="Р781Т-Р6" priority="1">
        <Task id="26" name="Загрузка УД" priority="1" singleThreaded="True" />
        <Task id="27" name="Регистрация УД" priority="1" singleThreaded="False" />
        <Task id="34" name="Сравнение ДВ_ПВ УД" priority="1" singleThreaded="False" />
        <Task id="42" name="ПризнакДоввода" priority="1" singleThreaded="False" />
        <Task id="46" name="Сравнение Проверка ДВ_ПВ_плен." priority="1" singleThreaded="False" />
        <Task id="48" name="Регистрация ВП" priority="1" singleThreaded="False" />
        <Task id="50" name="ForLists" priority="1" singleThreaded="False" />
      </Project>
      <Project id="3067" name="КП097Р-P49" priority="1">
        <Task id="4" name="Подсчет записей" priority="1" singleThreaded="False" />
        <Task id="65" name="Сравнение цифр" priority="1" singleThreaded="False" />
        <Task id="59" name="Разбиение пачек" priority="1" singleThreaded="True" />
        <Task id="101" name="Поиск дублей" priority="1" singleThreaded="False" />
        <Task id="105" name="АвтоВвод" priority="1" singleThreaded="False" />
        <Task id="112" name="RecordBackup2" priority="1" singleThreaded="False" />
        <Task id="121" name="Комлекты" priority="1" singleThreaded="False" />
        <Task id="113" name="Автообработка_даты" priority="1" singleThreaded="False" />
        <Task id="114" name="Автообработка_номера" priority="1" singleThreaded="False" />
        <Task id="115" name="Автообработка_рубр" priority="1" singleThreaded="False" />
        <Task id="125" name="ЗаменаПутей+Exist" priority="1" singleThreaded="False" />
        <Task id="128" name="Сравнение обложек" priority="1" singleThreaded="False" />
        <Task id="137" name="Сравнение рубрик" priority="1" singleThreaded="False" />
        <Task id="118" name="Нарезка продолжений" priority="1" singleThreaded="False" />
        <Task id="126" name="PatchForLeech" priority="1" singleThreaded="False" />
        <Task id="131" name="Сравнение разметки" priority="1" singleThreaded="False" />
        <Task id="133" name="InetPath" priority="1" singleThreaded="False" />
        <Task id="146" name="ПризнакПлохогоАвтоввода" priority="1" singleThreaded="False" />
      </Project>
      <Project id="3068" name="TEST_KP097" priority="1">
        <Task id="144" name="CopyValue" priority="1" singleThreaded="False" />
      </Project>
      <Project id="3070" name="КП097Р-Р38" priority="1">
        <Task id="4" name="Перенос данных" priority="1" singleThreaded="False" />
        <Task id="1" name="Регистрация" priority="1" singleThreaded="False" />
        <Task id="8" name="Регистрация комментария" priority="1" singleThreaded="False" />
        <Task id="3" name="Регистрация ввода" priority="1" singleThreaded="False" />
        <Task id="7" name="Для ВК" priority="1" singleThreaded="False" />
        <Task id="10" name="Для не ВК" priority="1" singleThreaded="False" />
        <Task id="12" name="Для образов" priority="1" singleThreaded="False" />
      </Project>
      <Project id="3073" name="КП002Х-Р7" priority="10">
        <Task id="2" name="UpdateDelo" priority="1" singleThreaded="False" />
        <Task id="3" name="Регистрация обложек" priority="1" singleThreaded="False" />
        <Task id="6" name="UpdateBIP" priority="1" singleThreaded="False" />
        <Task id="9" name="Сравнение обложек" priority="1" singleThreaded="False" />
        <Task id="10" name="Разбиение" priority="1" singleThreaded="True" />
        <Task id="15" name="Сравнение" priority="1" singleThreaded="False" />
        <Task id="21" name="Срвнение оборот" priority="1" singleThreaded="False" />
        <Task id="23" name="CheckMR" priority="1" singleThreaded="False" />
        <Task id="25" name="UpdatePath" priority="1" singleThreaded="False" />
        <Task id="30" name="SetPriority" priority="1" singleThreaded="False" />
        <Task id="18" name="Сборка" priority="1" singleThreaded="True" />
      </Project>
      <Project id="3074" name="КП002Х-Р8" priority="10">
        <Task id="2" name="UpdateDelo" priority="1" singleThreaded="False" />
        <Task id="3" name="Регистрация обложек" priority="1" singleThreaded="False" />
        <Task id="6" name="UpdateBIP" priority="1" singleThreaded="False" />
        <Task id="9" name="Сравнение обложек" priority="1" singleThreaded="False" />
        <Task id="10" name="Разбиение" priority="1" singleThreaded="True" />
        <Task id="15" name="Сравнение" priority="1" singleThreaded="False" />
        <Task id="18" name="Сборка" priority="1" singleThreaded="True" />
        <Task id="21" name="Срвнение оборот" priority="1" singleThreaded="False" />
        <Task id="23" name="CheckMR" priority="1" singleThreaded="False" />
        <Task id="25" name="UpdatePath" priority="1" singleThreaded="False" />
        <Task id="30" name="SetPriority" priority="1" singleThreaded="False" />
        <Task id="37" name="Сравнение сепарации" priority="1" singleThreaded="False" />
      </Project>
      <Project id="3075" name="КП002Х-Р9" priority="10">
        <Task id="2" name="UpdateDelo" priority="1" singleThreaded="False" />
        <Task id="3" name="Регистрация обложек" priority="1" singleThreaded="False" />
        <Task id="6" name="UpdateBIP" priority="1" singleThreaded="False" />
        <Task id="9" name="Сравнение обложек" priority="1" singleThreaded="False" />
        <Task id="10" name="Разбиение" priority="1" singleThreaded="True" />
        <Task id="15" name="Сравнение" priority="1" singleThreaded="False" />
        <Task id="18" name="Сборка" priority="1" singleThreaded="True" />
        <Task id="21" name="Срвнение оборот" priority="1" singleThreaded="False" />
        <Task id="23" name="CheckMR" priority="1" singleThreaded="False" />
        <Task id="25" name="UpdatePath" priority="1" singleThreaded="False" />
        <Task id="30" name="SetPriority" priority="1" singleThreaded="False" />
        <Task id="33" name="Сравнение сепарации" priority="1" singleThreaded="False" />
      </Project>
      <Project id="3076" name="КП002Х_Р13" priority="10">
        <Task id="1" name="Загрузка" priority="1" singleThreaded="True" />
        <Task id="2" name="Регистрация" priority="1" singleThreaded="False" />
        <Task id="3" name="Разбиение" priority="1" singleThreaded="True" />
        <Task id="7" name="Сравнение" priority="1" singleThreaded="False" />
        <Task id="8" name="CheckMR" priority="1" singleThreaded="False" />
        <Task id="15" name="Автообработка" priority="1" singleThreaded="False" />
        <Task id="16" name="Сборка" priority="1" singleThreaded="True" />
        <Task id="23" name="Сравнение ДУ_ДП" priority="1" singleThreaded="False" />
        <Task id="25" name="UpdateDeals" priority="1" singleThreaded="False" />
        <Task id="30" name="Сравнение донес." priority="1" singleThreaded="False" />
      </Project>
      <Project id="3077" name="КП002Х_Р12" priority="1">
        <Task id="1" name="Загрузка" priority="1" singleThreaded="True" />
        <Task id="2" name="Регистрация" priority="1" singleThreaded="False" />
        <Task id="3" name="Разбиение" priority="1" singleThreaded="True" />
        <Task id="7" name="Сравнение" priority="1" singleThreaded="False" />
        <Task id="8" name="CheckMR" priority="1" singleThreaded="False" />
        <Task id="15" name="Автообработка" priority="1" singleThreaded="False" />
        <Task id="16" name="Сборка" priority="1" singleThreaded="True" />
        <Task id="23" name="Сравнение ДУ_ДП" priority="1" singleThreaded="False" />
        <Task id="25" name="UpdateDeals" priority="1" singleThreaded="False" />
        <Task id="30" name="Сравнение донес." priority="1" singleThreaded="False" />
        <Task id="31" name="SetPriority" priority="1" singleThreaded="False" />
        <Task id="34" name="Update  NS" priority="1" singleThreaded="False" />
      </Project>
    </Projects>
    <Schedule workAlways="True" monday="True" tuesday="True" wednesday="True" thursday="True" friday="True" saturday="True" sunday="True" idle="False" beginHour="0" beginMinute="0" endHour="23" endMinute="59" />
  </Server>
</ServerTaskWorkerConfig>
Из него нужно удалить ненужные Task'и Удаляю я их таким образом:
 foreach (XmlNode project in xdoc.DocumentElement.SelectNodes("//Projects/Project"))
            {
 
                var projectId = Convert.ToInt32(project.Attributes["id"].InnerText);
                foreach (XmlNode task in project.ChildNodes)
                {
                    var taskId = Convert.ToInt32(task.Attributes["id"].InnerText);
                    var singleThreaded = task.Attributes["singleThreaded"].InnerText;
                    foreach (var item in list)
                    {

                        if (projectId == item.ProjectId && taskId == item.TaskId && item.ModuleName == "bad" &&
                           singleThreaded == "False")
                        {
                            
                                BackUpCreator(ref flag);
                            task.Attributes["singleThreaded"].Value = "True";
                            xdoc.Save("C:\\serverTW.config.xml");
                            LogWriter(DateTime.Now + " Проект " + projectId + " Задача " + taskId + " singleThreaded изменен на True");
 
                        }
                       
                            if (projectId == item.ProjectId && taskId == item.TaskId && item.ModuleName == null)
                            {
                                
                                BackUpCreator(ref flag);
                                project.RemoveChild(task);
                                xdoc.Save("C:\\serverTW.config.xml");
                                LogWriter(DateTime.Now + " Проект " + projectId + " Задача " + taskId + " удален");
                            }
Проблема заключается в том, что если в одном Project находятся несколько Task'ов, которые надо удалить, то удаляется только 1, и foreach извлекается следующий проект... Как можно решить данную проблему? В принципе я ее решил с помощью меток, но мне кажется, что это не совсем правильно...

Решение задачи: «Удаление узла XML»

textual
Листинг программы
 XDocument xd = XDocument.Load(путь);
                        IEnumerable<XElement> Task = xd.Root.Descendants("Project").Where(t => t.Attribute("Id").Value == удаляемый айди);
                        objects.Remove();
                        xd.Save(путь);

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


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

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

13   голосов , оценка 3.692 из 5