Доступ к узлу XML файла по значению атрибута. Получения индекса узла по значению - C#
Формулировка задачи:
Есть XML файл следующего содержания:
Зная значение атрибута(test_str) 4 строчки, нужно удалить этот узел(строку) или хотя бы узнать его индекс(в данном случае он равняется 3 - отсчет от 0 идёт), без использования цикла for, так как слишком долго отрабатывает в больших файлах, где может быть свыше 10000 строк. Пока у меня ничего не получилось, вроде весь инет облазил уже и доки, но не получается никак.
Пример кода ниже, но там я написал удаление через цикл for и по индексу "k" полученного в этом цикле.
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="wifi_fail_to_scan">Не удалось начать поиск сетей.</string> <string name="wifi_security_none">Нет</string> <string name="wifi_remembered">Сохранено</string> <string name="test_str">Отключено</string> <string name="wifi_disabled_network_failure">Ошибка IP-конфигурации</string> </resources>
XmlDocument xDocMod = new XmlDocument(); xDocMod.Load(ModStrXML); //открываем файл mod XmlElement xRootMod = xDocMod.DocumentElement; //получим корневой элемент int countNodesMod = xRootMod.ChildNodes.Count; // обход всех узлов в корневом элементе for (int k = 0; k < countNodesMod; k++) { if (xRootMod.ChildNodes[k].Attributes.Count > 0) { XmlNode attrMod = xRootMod.ChildNodes[k].Attributes.GetNamedItem("name"); //получили узел, грубо говоря это строка с тегом name="xxxxx" if (attrMod.Value == "нужное нам значение атрибута для удаления узла, например test_str") { xDocMod.DocumentElement.RemoveChild(xRootMod.ChildNodes[k]); //удаляем этот узел(строку) break; } } } xDocMod.Save(ModStrXML); //сохраняем изменения в файле
Решение задачи: «Доступ к узлу XML файла по значению атрибута. Получения индекса узла по значению»
textual
Листинг программы
var xml = XDocument.Load(ModStrXML); xml.XPathSelectElement("/resources/string[@name='test_str']")?.Remove(); xml.Save(ModStrXML);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д