ArgumentException:要插入的节点来自不同的文档上下文
ArgumentException: The node to be inserted is from a different document context
我已经就这个问题在 Whosebug 以及其他论坛上进行了搜索,但似乎没有人按照我的方式来做这件事。
我的意思是,在我的代码中,我没有使用 XMLNode,而是使用 XMLElement.
所以,事不宜迟,我的目的是保存在一个已经存在的 XML 文档中,一个新元素是 child 除根元素之外的其他现有元素。
这是我的 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 将 元素作为节点获取(至少我认为它是这样做的)。
后来,我这样做:
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");
}
}
}
我已经就这个问题在 Whosebug 以及其他论坛上进行了搜索,但似乎没有人按照我的方式来做这件事。 我的意思是,在我的代码中,我没有使用 XMLNode,而是使用 XMLElement.
所以,事不宜迟,我的目的是保存在一个已经存在的 XML 文档中,一个新元素是 child 除根元素之外的其他现有元素。
这是我的 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 将
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");
}
}
}