簡體   English   中英

將對象序列化為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)行,就會引發以下異常:“ System.Xml.dll中發生了'System.ArgumentException'類型的異常,但未在用戶代碼中處理。其他信息:要插入的節點來自其他文檔上下文。”

任何建議將不勝感激!

編輯:這是顯示我的馬類和xmldb的鏈接。

嘗試這個。 如果數據和類結構正確,則應該工作。

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

注釋中提到了更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM