ArgumentException: вставляемый узел находится в другом контексте документа

Я искал Stackoverflow по этому вопросу, а также другие форумы, но, похоже, никто не делает это так, как я. Под этим я подразумеваю, что в моем коде вместо XMLNode я использую XMLElement.

Итак, без дальнейших церемоний, я намерен сохранить в уже существующем XML-документе новый элемент, который является дочерним элементом других существующих элементов, помимо корня.

Это пример моего XML-файла:

<ROOT>
  <NOT_THIS_ONE>
  </NOT_THIS_ONE>

  <THIS_ONE>
  </THIS_ONE>
</ROOT>

Итак, это мой код:

//XML File
TextAsset repository = Resources.Load("Repository") as TextAsset;

//Create XML Reference
XmlDocument xmlDocument = new XmlDocument();

//Load XML File into XML Reference
xmlDocument.LoadXml(repository.text);

//Root Node
XmlNode statsNode = GetRootNode();

//Get History Node
XmlNode thisOneNode = statsNode.ChildNodes.Item(1);

Функция GetRootNode() такова:

//Create Xml Reference
XmlDocument xmlData = new XmlDocument();

//Load Xml File into Xml Reference
xmlData.LoadXml(repository.text);

//Get Root Node
return xmlData.ChildNodes.Item(1);

thisOneNode получает элемент <THIS_ONE> как узел (по крайней мере, я так думаю). Позже я делаю так:

XmlElement childOfThisOne = xmlDocument.CreateElement("CHILD");

XmlElement pointsSession = xmlDocument.CreateElement("POINTS");
pointsSession.InnerText = points.ToString();

childOfThisOne.AppendChild(pointsSession);

thisOneNode.AppendChild(childOfThisOne);

xmlDocument.Save("Assets/Resources/GamePoints.xml");

И мое намерение с этим было бы примерно таким:

<ROOT>
  <NOT_THIS_ONE>
  </NOT_THIS_ONE>

  <THIS_ONE>
    <CHILD>
      <POINTS>102</POINTS>
    </CHILD>
  </THIS_ONE>
</ROOT>

Но я получаю сообщение об ошибке в заголовке: «ArgumentException: вставляемый узел находится в другом контексте документа».

И рассматриваемая строка такова: thisOneNode.AppendChild(childOfThisOne);

Теперь, когда я искал и нашел статьи, люди использовали XmlNode и даже использовали xmlDocument.ImportNode(); Я тоже пробовал, и возникла та же ошибка. Теперь я не знаю, как это исправить, и я прошу вашей помощи в этом.

Спасибо за ваше время и счастливых праздников!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
306
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование Xml Linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml = 
                @"<ROOT>
                      <NOT_THIS_ONE>
                      </NOT_THIS_ONE>

                      <THIS_ONE>
                      </THIS_ONE>
                  </ROOT>";

            XDocument doc = XDocument.Parse(xml);

            XElement thisOne = doc.Descendants("THIS_ONE").FirstOrDefault();

            thisOne.Add(new XElement("CHILD", new XElement("POINTS", 102)));
            doc.Save("Assets/Resources/GamePoints.xml");
        }
    }
}

Спасибо за комментарий! Я попробую прямо сейчас и вернусь к вам через секунду!

Dark Kool 21.12.2020 10:37

Привет! Итак, это действительно помогло! Единственная проблема заключалась в том, что «POINTS» не является дочерним элементом «CHILD», но я считаю, что мне нужно создать XElement «CHILD», а затем child.AddChild («POINTS», 102); И, наконец, thisOne.AddChild(child) и сохраните. Собираюсь попробовать это очень быстро и обновить это! Еще раз большое спасибо!

Dark Kool 21.12.2020 11:06

Да, это нужно сделать так, как я упоминал ранее (думаю, может быть и по-другому). Но, без сомнения, вы мне очень помогли! Большое большое спасибо!

Dark Kool 21.12.2020 11:10

Другие вопросы по теме