Вставить значение в xml файл

191
17 июня 2018, 08:40

Здравстуйте. Есть 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();

Как можно заменить значение ссылки? Например первой.

Answer 1

С помощью 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

READ ALSO
C# Exchange API. Не могу получить список комнат

C# Exchange API. Не могу получить список комнат

Впервые знакомлюсь с EWS API 20 (https://www

233
Почему может не работать выборка?

Почему может не работать выборка?

Есть примерная структура бд:

193
Не исполняются sql запросы в node.js?

Не исполняются sql запросы в node.js?

При попытке зайти на страницу, где есть sql запросы в nоdejs, в консоли выводится предупреждение: (node:29843) [DEP0096] DeprecationWarning: timers

254
mysql datetime between

mysql datetime between

Есть табличка которая содержит поле datetimeТребуется выбрать данные из таблицы которые попадают под определённое ВРЕМЯ

246