Доступ к узлу 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);