Я искал 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(); Я тоже пробовал, и возникла та же ошибка. Теперь я не знаю, как это исправить, и я прошу вашей помощи в этом.
Спасибо за ваше время и счастливых праздников!
Использование 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");
}
}
}
Привет! Итак, это действительно помогло! Единственная проблема заключалась в том, что «POINTS» не является дочерним элементом «CHILD», но я считаю, что мне нужно создать XElement «CHILD», а затем child.AddChild («POINTS», 102); И, наконец, thisOne.AddChild(child) и сохраните. Собираюсь попробовать это очень быстро и обновить это! Еще раз большое спасибо!
Да, это нужно сделать так, как я упоминал ранее (думаю, может быть и по-другому). Но, без сомнения, вы мне очень помогли! Большое большое спасибо!
Спасибо за комментарий! Я попробую прямо сейчас и вернусь к вам через секунду!