将对象序列化为 XML 并将其附加到 XML 文件
Serializing an object to XML and appending it to XML file
我正在尝试将(马)对象转换为 XmlElement,以便我可以将其附加到 XML 文件。这是我最近尝试过的。
// create writer and serializer to add horse to xml
var stringwriter = new StringWriter();
var serializer = new XmlSerializer(horse.GetType());
// serialize horse object to xml
serializer.Serialize(stringwriter, horse);
var xmlStr = stringwriter.ToString();
// format string to xml
var horseXml = new XmlDocument();
horseXml.LoadXml(xmlStr);
// get horse element from horseXml
var horseEl = horseXml.ChildNodes[0];
// assign xmldb to xml document
var xmlDb = new XmlDocument();
xmlDb.Load(xmlDbFilepath);
XmlNode root = xmlDb.DocumentElement;
// add horseEl to root of xmlDb
root.AppendChild(horseEl);
xmlDb.Save(xmlDbFilepath);
不幸的是,一旦我到达行 root.AppendChild(horseEl),就会抛出以下异常:"An exception of type 'System.ArgumentException' occurred in System.Xml.dll but was not handled in user code Additional information: The node to be inserted is from a different document context."
如有任何建议,我们将不胜感激!
编辑:这是 link 显示 my horse class and xmldb。
试试这个。如果数据和 class 结构正确,应该可以工作。
// same code till this
// get horse element from horseXml
XmlElement horseEl = horseXml.DocumentElement; //[1] get the doc element
// assign xmldb to xml document
var xmlDb = new XmlDocument();
xmlDb.Load(xmlDbFilepath);
//XmlNode root = xmlDb.DocumentElement; [2] removed
// add horseEl to root of xmlDb
//var newRoot = root.AppendChild(clonedHorseEl); [3] removed
var xe = xmlDb.CreateElement("Horse"); //[4] Create new Horse element on xmlDb
xe.InnerXml = horseEl.InnerXml; //[5] copy horseEl content
xmlDb.DocumentElement.AppendChild(xe);
xmlDb.Save(xmlDbFilepath);
评论中提到了更改。
我正在尝试将(马)对象转换为 XmlElement,以便我可以将其附加到 XML 文件。这是我最近尝试过的。
// create writer and serializer to add horse to xml
var stringwriter = new StringWriter();
var serializer = new XmlSerializer(horse.GetType());
// serialize horse object to xml
serializer.Serialize(stringwriter, horse);
var xmlStr = stringwriter.ToString();
// format string to xml
var horseXml = new XmlDocument();
horseXml.LoadXml(xmlStr);
// get horse element from horseXml
var horseEl = horseXml.ChildNodes[0];
// assign xmldb to xml document
var xmlDb = new XmlDocument();
xmlDb.Load(xmlDbFilepath);
XmlNode root = xmlDb.DocumentElement;
// add horseEl to root of xmlDb
root.AppendChild(horseEl);
xmlDb.Save(xmlDbFilepath);
不幸的是,一旦我到达行 root.AppendChild(horseEl),就会抛出以下异常:"An exception of type 'System.ArgumentException' occurred in System.Xml.dll but was not handled in user code Additional information: The node to be inserted is from a different document context."
如有任何建议,我们将不胜感激!
编辑:这是 link 显示 my horse class and xmldb。
试试这个。如果数据和 class 结构正确,应该可以工作。
// same code till this
// get horse element from horseXml
XmlElement horseEl = horseXml.DocumentElement; //[1] get the doc element
// assign xmldb to xml document
var xmlDb = new XmlDocument();
xmlDb.Load(xmlDbFilepath);
//XmlNode root = xmlDb.DocumentElement; [2] removed
// add horseEl to root of xmlDb
//var newRoot = root.AppendChild(clonedHorseEl); [3] removed
var xe = xmlDb.CreateElement("Horse"); //[4] Create new Horse element on xmlDb
xe.InnerXml = horseEl.InnerXml; //[5] copy horseEl content
xmlDb.DocumentElement.AppendChild(xe);
xmlDb.Save(xmlDbFilepath);
评论中提到了更改。