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

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

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

В общем имеется такой XML
Листинг программы
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ServerTaskWorkerConfig>
  3. <!-- <Server uri="https://172.16.54.11/server/octopus_manager.soap" queryPause="200" modulePath="..\Local" packData="True"> -->
  4. <Server uri="tcp://172.16.54.11:2007/Octopus.Manager" queryPause="200" modulePath="..\Local" packData="True">
  5. <Projects>
  6. <Project id="3058" name="Р447Р-Р3" priority="1">
  7. <Task id="65" name="Сравнение цифр" priority="3" singleThreaded="False" />
  8. <Task id="66" name="Сравнение рубрик" priority="3" singleThreaded="False" />
  9. <Task id="67" name="ЗаглКопир" priority="1" singleThreaded="False" />
  10. <Task id="68" name="Регистрация заголовка" priority="1" singleThreaded="False" />
  11. <Task id="69" name="Регистрация" priority="1" singleThreaded="False" />
  12. <Task id="71" name="QA_Gate_рубрики" priority="1" singleThreaded="False" />
  13. <Task id="72" name="QA_Gate_цифры" priority="1" singleThreaded="False" />
  14. <Task id="84" name="Выгрузка в Тверь" priority="1" singleThreaded="False" />
  15. <Task id="73" name="QA_Gate_Заголовок" priority="1" singleThreaded="False" />
  16. <Task id="86" name="Загрузка" priority="1" singleThreaded="True" />
  17. <Task id="90" name="Сравнение примечания" priority="3" singleThreaded="False" />
  18. <Task id="87" name="Простановка признака" priority="3" singleThreaded="False" />
  19. <Task id="94" name="Стат.Загрузка" priority="1" singleThreaded="True" />
  20. <Task id="97" name="Копирование листов" priority="1" singleThreaded="False" />
  21. <Task id="98" name="Регистр Листов" priority="1" singleThreaded="False" />
  22. </Project>
  23. <Project id="3062" name="Р781Т-Р3" priority="1">
  24. <Task id="3" name="Загрузка из РК" priority="1" singleThreaded="True" />
  25. <Task id="6" name="Регистрация" priority="1" singleThreaded="False" />
  26. <Task id="20" name="Замена путей" priority="1" singleThreaded="False" />
  27. <Task id="8" name="Сравнение" priority="1" singleThreaded="False" />
  28. <Task id="10" name="Выгрузка для РК" priority="1" singleThreaded="False" />
  29. </Project>
  30. <Project id="3061" name="КП097Р-Р37_Доп" priority="1">
  31. <Task id="1" name="Регистрация" priority="1" singleThreaded="False" />
  32. <Task id="2" name="Объединение пачек" priority="1" singleThreaded="True" />
  33. <Task id="4" name="Перенос данных" priority="1" singleThreaded="False" />
  34. </Project>
  35. <Project id="3063" name="Р781Т-Р4" priority="1">
  36. <Task id="10" name="Загрузка ВП из РК" priority="1" singleThreaded="True" />
  37. <Task id="11" name="Регистрация ВП" priority="1" singleThreaded="False" />
  38. <Task id="14" name="Сравнение ВП" priority="1" singleThreaded="False" />
  39. <Task id="20" name="Сравнение" priority="1" singleThreaded="False" />
  40. <Task id="26" name="Загрузка УД из РК" priority="1" singleThreaded="True" />
  41. <Task id="27" name="Регистрация УД" priority="1" singleThreaded="False" />
  42. <Task id="29" name="Замена Путей" priority="1" singleThreaded="False" />
  43. <Task id="28" name="Выгрузка УД на РК" priority="1" singleThreaded="False" />
  44. </Project>
  45. <Project id="3060" name="КП097Р-Р37" priority="1">
  46. <Task id="2" name="Регистрация" priority="1" singleThreaded="False" />
  47. <Task id="3" name="Перенос данных" priority="1" singleThreaded="False" />
  48. <Task id="16" name="Регистрация соответствия" priority="1" singleThreaded="False" />
  49. <Task id="19" name="Признак для Ц" priority="1" singleThreaded="False" />
  50. <Task id="20" name="Признак для 2" priority="1" singleThreaded="False" />
  51. </Project>
  52. <Project id="3064" name="Р781Т-Р5" priority="1">
  53. <Task id="3" name="Загрузка" priority="1" singleThreaded="True" />
  54. <Task id="6" name="Регистрация" priority="1" singleThreaded="False" />
  55. <Task id="27" name="Сравнение ДВ_ПВ" priority="1" singleThreaded="False" />
  56. <Task id="34" name="ПризнакДоввда" priority="1" singleThreaded="False" />
  57. </Project>
  58. <Project id="3065" name="Р781Т-Р6" priority="1">
  59. <Task id="26" name="Загрузка УД" priority="1" singleThreaded="True" />
  60. <Task id="27" name="Регистрация УД" priority="1" singleThreaded="False" />
  61. <Task id="34" name="Сравнение ДВ_ПВ УД" priority="1" singleThreaded="False" />
  62. <Task id="42" name="ПризнакДоввода" priority="1" singleThreaded="False" />
  63. <Task id="46" name="Сравнение Проверка ДВ_ПВ_плен." priority="1" singleThreaded="False" />
  64. <Task id="48" name="Регистрация ВП" priority="1" singleThreaded="False" />
  65. <Task id="50" name="ForLists" priority="1" singleThreaded="False" />
  66. </Project>
  67. <Project id="3067" name="КП097Р-P49" priority="1">
  68. <Task id="4" name="Подсчет записей" priority="1" singleThreaded="False" />
  69. <Task id="65" name="Сравнение цифр" priority="1" singleThreaded="False" />
  70. <Task id="59" name="Разбиение пачек" priority="1" singleThreaded="True" />
  71. <Task id="101" name="Поиск дублей" priority="1" singleThreaded="False" />
  72. <Task id="105" name="АвтоВвод" priority="1" singleThreaded="False" />
  73. <Task id="112" name="RecordBackup2" priority="1" singleThreaded="False" />
  74. <Task id="121" name="Комлекты" priority="1" singleThreaded="False" />
  75. <Task id="113" name="Автообработка_даты" priority="1" singleThreaded="False" />
  76. <Task id="114" name="Автообработка_номера" priority="1" singleThreaded="False" />
  77. <Task id="115" name="Автообработка_рубр" priority="1" singleThreaded="False" />
  78. <Task id="125" name="ЗаменаПутей+Exist" priority="1" singleThreaded="False" />
  79. <Task id="128" name="Сравнение обложек" priority="1" singleThreaded="False" />
  80. <Task id="137" name="Сравнение рубрик" priority="1" singleThreaded="False" />
  81. <Task id="118" name="Нарезка продолжений" priority="1" singleThreaded="False" />
  82. <Task id="126" name="PatchForLeech" priority="1" singleThreaded="False" />
  83. <Task id="131" name="Сравнение разметки" priority="1" singleThreaded="False" />
  84. <Task id="133" name="InetPath" priority="1" singleThreaded="False" />
  85. <Task id="146" name="ПризнакПлохогоАвтоввода" priority="1" singleThreaded="False" />
  86. </Project>
  87. <Project id="3068" name="TEST_KP097" priority="1">
  88. <Task id="144" name="CopyValue" priority="1" singleThreaded="False" />
  89. </Project>
  90. <Project id="3070" name="КП097Р-Р38" priority="1">
  91. <Task id="4" name="Перенос данных" priority="1" singleThreaded="False" />
  92. <Task id="1" name="Регистрация" priority="1" singleThreaded="False" />
  93. <Task id="8" name="Регистрация комментария" priority="1" singleThreaded="False" />
  94. <Task id="3" name="Регистрация ввода" priority="1" singleThreaded="False" />
  95. <Task id="7" name="Для ВК" priority="1" singleThreaded="False" />
  96. <Task id="10" name="Для не ВК" priority="1" singleThreaded="False" />
  97. <Task id="12" name="Для образов" priority="1" singleThreaded="False" />
  98. </Project>
  99. <Project id="3073" name="КП002Х-Р7" priority="10">
  100. <Task id="2" name="UpdateDelo" priority="1" singleThreaded="False" />
  101. <Task id="3" name="Регистрация обложек" priority="1" singleThreaded="False" />
  102. <Task id="6" name="UpdateBIP" priority="1" singleThreaded="False" />
  103. <Task id="9" name="Сравнение обложек" priority="1" singleThreaded="False" />
  104. <Task id="10" name="Разбиение" priority="1" singleThreaded="True" />
  105. <Task id="15" name="Сравнение" priority="1" singleThreaded="False" />
  106. <Task id="21" name="Срвнение оборот" priority="1" singleThreaded="False" />
  107. <Task id="23" name="CheckMR" priority="1" singleThreaded="False" />
  108. <Task id="25" name="UpdatePath" priority="1" singleThreaded="False" />
  109. <Task id="30" name="SetPriority" priority="1" singleThreaded="False" />
  110. <Task id="18" name="Сборка" priority="1" singleThreaded="True" />
  111. </Project>
  112. <Project id="3074" name="КП002Х-Р8" priority="10">
  113. <Task id="2" name="UpdateDelo" priority="1" singleThreaded="False" />
  114. <Task id="3" name="Регистрация обложек" priority="1" singleThreaded="False" />
  115. <Task id="6" name="UpdateBIP" priority="1" singleThreaded="False" />
  116. <Task id="9" name="Сравнение обложек" priority="1" singleThreaded="False" />
  117. <Task id="10" name="Разбиение" priority="1" singleThreaded="True" />
  118. <Task id="15" name="Сравнение" priority="1" singleThreaded="False" />
  119. <Task id="18" name="Сборка" priority="1" singleThreaded="True" />
  120. <Task id="21" name="Срвнение оборот" priority="1" singleThreaded="False" />
  121. <Task id="23" name="CheckMR" priority="1" singleThreaded="False" />
  122. <Task id="25" name="UpdatePath" priority="1" singleThreaded="False" />
  123. <Task id="30" name="SetPriority" priority="1" singleThreaded="False" />
  124. <Task id="37" name="Сравнение сепарации" priority="1" singleThreaded="False" />
  125. </Project>
  126. <Project id="3075" name="КП002Х-Р9" priority="10">
  127. <Task id="2" name="UpdateDelo" priority="1" singleThreaded="False" />
  128. <Task id="3" name="Регистрация обложек" priority="1" singleThreaded="False" />
  129. <Task id="6" name="UpdateBIP" priority="1" singleThreaded="False" />
  130. <Task id="9" name="Сравнение обложек" priority="1" singleThreaded="False" />
  131. <Task id="10" name="Разбиение" priority="1" singleThreaded="True" />
  132. <Task id="15" name="Сравнение" priority="1" singleThreaded="False" />
  133. <Task id="18" name="Сборка" priority="1" singleThreaded="True" />
  134. <Task id="21" name="Срвнение оборот" priority="1" singleThreaded="False" />
  135. <Task id="23" name="CheckMR" priority="1" singleThreaded="False" />
  136. <Task id="25" name="UpdatePath" priority="1" singleThreaded="False" />
  137. <Task id="30" name="SetPriority" priority="1" singleThreaded="False" />
  138. <Task id="33" name="Сравнение сепарации" priority="1" singleThreaded="False" />
  139. </Project>
  140. <Project id="3076" name="КП002Х_Р13" priority="10">
  141. <Task id="1" name="Загрузка" priority="1" singleThreaded="True" />
  142. <Task id="2" name="Регистрация" priority="1" singleThreaded="False" />
  143. <Task id="3" name="Разбиение" priority="1" singleThreaded="True" />
  144. <Task id="7" name="Сравнение" priority="1" singleThreaded="False" />
  145. <Task id="8" name="CheckMR" priority="1" singleThreaded="False" />
  146. <Task id="15" name="Автообработка" priority="1" singleThreaded="False" />
  147. <Task id="16" name="Сборка" priority="1" singleThreaded="True" />
  148. <Task id="23" name="Сравнение ДУ_ДП" priority="1" singleThreaded="False" />
  149. <Task id="25" name="UpdateDeals" priority="1" singleThreaded="False" />
  150. <Task id="30" name="Сравнение донес." priority="1" singleThreaded="False" />
  151. </Project>
  152. <Project id="3077" name="КП002Х_Р12" priority="1">
  153. <Task id="1" name="Загрузка" priority="1" singleThreaded="True" />
  154. <Task id="2" name="Регистрация" priority="1" singleThreaded="False" />
  155. <Task id="3" name="Разбиение" priority="1" singleThreaded="True" />
  156. <Task id="7" name="Сравнение" priority="1" singleThreaded="False" />
  157. <Task id="8" name="CheckMR" priority="1" singleThreaded="False" />
  158. <Task id="15" name="Автообработка" priority="1" singleThreaded="False" />
  159. <Task id="16" name="Сборка" priority="1" singleThreaded="True" />
  160. <Task id="23" name="Сравнение ДУ_ДП" priority="1" singleThreaded="False" />
  161. <Task id="25" name="UpdateDeals" priority="1" singleThreaded="False" />
  162. <Task id="30" name="Сравнение донес." priority="1" singleThreaded="False" />
  163. <Task id="31" name="SetPriority" priority="1" singleThreaded="False" />
  164. <Task id="34" name="Update NS" priority="1" singleThreaded="False" />
  165. </Project>
  166. </Projects>
  167. <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" />
  168. </Server>
  169. </ServerTaskWorkerConfig>
Из него нужно удалить ненужные Task'и Удаляю я их таким образом:
Листинг программы
  1. foreach (XmlNode project in xdoc.DocumentElement.SelectNodes("//Projects/Project"))
  2. {
  3. var projectId = Convert.ToInt32(project.Attributes["id"].InnerText);
  4. foreach (XmlNode task in project.ChildNodes)
  5. {
  6. var taskId = Convert.ToInt32(task.Attributes["id"].InnerText);
  7. var singleThreaded = task.Attributes["singleThreaded"].InnerText;
  8. foreach (var item in list)
  9. {
  10.  
  11. if (projectId == item.ProjectId && taskId == item.TaskId && item.ModuleName == "bad" &&
  12. singleThreaded == "False")
  13. {
  14. BackUpCreator(ref flag);
  15. task.Attributes["singleThreaded"].Value = "True";
  16. xdoc.Save("C:\\serverTW.config.xml");
  17. LogWriter(DateTime.Now + " Проект " + projectId + " Задача " + taskId + " singleThreaded изменен на True");
  18. }
  19. if (projectId == item.ProjectId && taskId == item.TaskId && item.ModuleName == null)
  20. {
  21. BackUpCreator(ref flag);
  22. project.RemoveChild(task);
  23. xdoc.Save("C:\\serverTW.config.xml");
  24. LogWriter(DateTime.Now + " Проект " + projectId + " Задача " + taskId + " удален");
  25. }
Проблема заключается в том, что если в одном Project находятся несколько Task'ов, которые надо удалить, то удаляется только 1, и foreach извлекается следующий проект... Как можно решить данную проблему? В принципе я ее решил с помощью меток, но мне кажется, что это не совсем правильно...

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

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

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


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

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

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

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

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

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