2015-10-23 44 views
0

我试图将(马)对象转换为XmlElement,以便我可以将它附加到XML文件。这是我最近尝试过的。将对象序列化为XML并将其附加到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),这将引发以下异常:“类型‘System.ArgumentException’发生在system.xml.dll的的异常,但没有处理在用户代码中附加信息:要插入的节点来自不同的文档上下文。“

任何意见将不胜感激!

编辑:这里是一个链接显示my horse class and xmldb

+0

请包含'horse'的类定义和文件'xmlDbFilepath'的内容。 –

+0

刚刚添加了一个链接,谢谢。 – fyodorfranz

+0

该课程不完整。请添加子类和枚举的定义。 –

回答

1

试试这个。如果数据和班级结构正确,应该可以工作。

// 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); 

更改在评论中提及。

+0

工作完美,非常感谢! – fyodorfranz