Удаление узла XML - C#
Формулировка задачи:
В общем имеется такой XML
Из него нужно удалить ненужные Task'и
Удаляю я их таким образом:
Проблема заключается в том, что если в одном Project находятся несколько Task'ов, которые надо удалить, то удаляется только 1, и foreach извлекается следующий проект...
Как можно решить данную проблему?
В принципе я ее решил с помощью меток, но мне кажется, что это не совсем правильно...
<?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>
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 + " удален"); }
Решение задачи: «Удаление узла XML»
textual
Листинг программы
XDocument xd = XDocument.Load(путь); IEnumerable<XElement> Task = xd.Root.Descendants("Project").Where(t => t.Attribute("Id").Value == удаляемый айди); objects.Remove(); xd.Save(путь);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д