Я пытаюсь добавить (добавить) новый элемент <Period></Period>
в следующий XML;C# - Добавление нового элемента в файл XML с использованием LINQ XML (XDocument/XElement)
<?xml version="1.0" encoding="utf-8"?>
<Scheduler>
<Module guid="64A3EB4C-7F34-47F3-8894-933CB0048D87">
<RetrieveDays>1</RetrieveDays>
<Schedule>
<Period>1</Period>
<Period>33</Period>
<Period>49</Period>
<Period>73</Period>
</Schedule>
</Module>
</Scheduler>
Так, например, я передаю значение 96, новый XML будет выглядеть;
<?xml version="1.0" encoding="utf-8"?>
<Scheduler>
<Module guid="64A3EB4C-7F34-47F3-8894-933CB0048D87">
<RetrieveDays>1</RetrieveDays>
<Schedule>
<Period>1</Period>
<Period>33</Period>
<Period>49</Period>
<Period>73</Period>
<Period>96</Period>
</Schedule>
</Module>
</Scheduler>
Использование следующего кода;
// period is the new value
XDocument xmlDoc = new XDocument();
xmlDoc = XDocument.Load(String.Format(@"{0}\{1}", settingsDir, settingsFilename));
XElement periodNodes = xmlDoc.Root.Descendants("Module").Where(i => (String)i.Attribute("guid") == moduleGuId).First().Element("Schedule");
if (periodNodes.Descendants("Period").Where(x => x.Value == period.ToString()).Count() == 0)
periodNodes.Add(new XElement("Period", period.ToString()));
xmlDoc.Save(String.Format(@"{0}\{1}", settingsDir, settingsFilename));
Но, к сожалению, не новый <Period></Period>
элемент не будет создаваться. Я проверил, что XML действителен, и это так. Я попробовал переименовать элемент, но без изменений.
Я уже несколько часов царапаю голову и не могу найти решение, чего мне не хватает? Любая помощь будет оценена!
**** Обновление ****
Ну, это неудобно: я перезагрузил компьютер и VS, и теперь он работает ... пойди разберись. Тем не менее, благодарю вас всех за такие быстрые ответы и предложения.
Вы ступил через него и проверить, что 'periodNodes.Add' на самом деле называется? –
Прежде чем спросить нас, вы можете [использовать отладчик] (http://www.codeproject.com/Articles/79508/Mastering-Debugging-in-Visual-Studio-A-Beginn), чтобы выполнить свой код и проверить, в вашем выражении 'if' фактически вычисляется значение true, а если нет, то почему не –
Проверьте [эта скрипка] (https://dotnetfiddle.net/Wfh7iq) - ваш код работает нормально. Если у вас все еще есть проблемы, включите [mcve]. –