Доступ к узлу XML файла по значению атрибута. Получения индекса узла по значению - C#

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

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

Есть XML файл следующего содержания:
<?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>
Зная значение атрибута(test_str) 4 строчки, нужно удалить этот узел(строку) или хотя бы узнать его индекс(в данном случае он равняется 3 - отсчет от 0 идёт), без использования цикла for, так как слишком долго отрабатывает в больших файлах, где может быть свыше 10000 строк. Пока у меня ничего не получилось, вроде весь инет облазил уже и доки, но не получается никак. Пример кода ниже, но там я написал удаление через цикл for и по индексу "k" полученного в этом цикле.
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);

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


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

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

5   голосов , оценка 4.4 из 5
Похожие ответы