Вы пытаетесь добавить currentTimeNode
как дочерний элемент xDoc1
- но xDoc1
- это сам документ XML, что означает, что вы пытаетесь добавить currentTimeNode
в качестве второго корневого элемента XML .Однако правильно сформированный XML-документ должен иметь ровно один корневой элемент, и поэтому xDoc1.AddFirst(currentTimeNode)
выдает исключение, которое вы видите, поскольку у него уже есть корневой элемент <CurrentStatus>
.
Вместо этого следует добавить currentTimeNode
к уже существующим Root
из xDoc1
:
xDoc1.Root.AddFirst(currentTimeNode);
Или, если есть вероятность, что xDoc1.Root
будет нулевым (потому что вы создаете его с нуля впамяти вместо загрузки из ранее существующего файла), вы можете выделить ее условно:
if (xDoc1.Root == null)
xDoc1.Add(new XElement("CurrentStatus"));
xDoc1.Root.AddFirst(currentTimeNode);
Кстати, может быть проще и эффективнее заменить ToList()[0]
на First()
, поскольку First()
не будет пытаться перечислить и материализовать весь запрос после возвращения первого элемента:
var currentTimeNode = xDoc2.Descendants("Time").First(); //first decendent
Пример скрипта здесь .