2013-06-25 193 views
3

我有XML文檔中存儲的對象列表。我正在使用序列化/反序列化來存儲和檢索數據。當我不得不存儲新對象時,我將整個xml反序列化爲一個List,並將新對象添加到這個List並再次序列化以將其存儲回xml。向Xml添加新對象

我的問題是,這是正確的方式來添加新的對象,或有任何其他方式來添加新的對象,我不想手動創建標籤和添加,因爲它們可能會導致錯誤,同時反序列化數據。

這是我使用的是現在什麼:

public static T readXml<T>(string fileName) 
    { 
     T tempList ; 
     XmlSerializer deserializer = new XmlSerializer(typeof(T)); 
     TextReader textReader = new StreamReader(fileName); 
     tempList = (T)deserializer.Deserialize(textReader); 
     textReader.Close(); 

     return tempList; 
    } 

    public static void writeXml<T>(T tempList,string fileName) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(T)); 
     TextWriter textWriter = new StreamWriter(fileName); 
     serializer.Serialize(textWriter, tempList); 
     textWriter.Close(); 
    } 

回答

1

本質上說,是的,序列化是正確的道路要走。它非常健壯,相當靈活,而且比「手動」編寫對象要少得多(而且更容易維護)。但是,如果您正在序列化的對象圖很大,並且您希望使您的過程更高效,則可能需要考慮是否可以僅序列化新對象,然後追加或插入它到現有的Xml中。

要插入或追加新節點,需要將現有的xml加載到XmlDocument對象中,找到要添加新內容的節點並追加新節點。例如:

XmlDocument xmldoc = new XmlDocument(); 
xmldoc.Load("MyXml.xml"); 
XmlDocument newDoc = new XmlDocument(); 
newDoc.Load("MyNewObject.xml"); 

//Use Xpath to specify node 
XmlNode insertNode = xmldoc.SelectSingleNode("parentElement/myElement"); 
XmlNode newObj = newDoc.SelectSingleNode("rootElement"); 

insertNode.AppendChild(newObj); 

xmldoc.Save("MyXml.xml"); 

從文件中檢索XML是唯一的例子的目的:在現實世界中,你可能已經以某種形式流或XML閱讀器,或者您可能需要從檢索一個數據庫。

+0

是的,這就是我想了解的,我如何追加單個對象? –

+0

用上面的例子編輯 –