Здравстуйте. Есть 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
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости