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(); Я тоже пробовал, и возникла та же ошибка. Теперь я не знаю, как это исправить, и я прошу вашей помощи в этом.

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

Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
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

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