Здравстуйте. Есть xml-файл.
<MenuGroups>
<MenuGroup RuText="Группа" EnText="Group1">
<MenuItems>
<MenuItem RuText="Текст1" Link="Ссылка1" />
</MenuItems>
<MenuItems>
<MenuItem RuText="Текст2" Link="Ссылка2" />
</MenuItems>
</MenuGroup>
</MenuGroups>
Я вытащил эту xml в документ и создал XPathNavigator
XmlDocument doc = new XmlDocument();
doc.Load(file);
XPathNavigator navigator = doc.CreateNavigator();
Как можно заменить значение ссылки? Например первой.
С помощью Linq2Xml это можно сделать, например, так:
var xdoc = XDocument.Load(filepath);
xdoc.Root // или .Element("MenuGroups")
.Element("MenuGroup")
.Elements("MenuItems")
.First() // или .ElementAt(0)
.Element("MenuItem")
.Attribute("Link")
.Value = "Новая ссылка";
Console.WriteLine(xdoc);
Свойство Root
в XDocument
всегда возвращает корневой элемент, метод Element
возвращает первый найденный элемент с указанным именем, Elements
возвращает перечисление элементов с указанным именем (или всех элементов, если имя опустить), с помощью Linq берем оттуда нужный элемент. Методы Attribute
/Attributes
действуют аналогично методам Element
/Elements
, но ищут по атрибутам.
После того, как нужный атрибут (или элемент) найден, можно изменить его свойство Value
.
Использование XPathNavigator
гораздо менее удобно, ваш код мог бы выглядеть примерно так:
var doc = new XmlDocument();
doc.Load(filepath);
navigator.MoveToChild("MenuGroups", "");
navigator.MoveToChild("MenuGroup", "");
navigator.MoveToChild("MenuItems", "");
navigator.MoveToChild("MenuItem", "");
navigator.MoveToAttribute("Link", "");
navigator.SetValue("Новая ссылка");
Console.WriteLine(doc.OuterXml);
Документация по использованию классов XmlDocument
и XPathDocument
находится здесь: Обработка XML-данных с использованием модели данных XPath
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При попытке зайти на страницу, где есть sql запросы в nоdejs, в консоли выводится предупреждение: (node:29843) [DEP0096] DeprecationWarning: timers
Есть табличка которая содержит поле datetimeТребуется выбрать данные из таблицы которые попадают под определённое ВРЕМЯ