正在向Xml添加新对象
本文关键字:对象 新对象 添加 Xml | 更新日期: 2023-09-27 18:19:44
我有要存储在XML文档中的对象列表。我正在使用序列化/反序列化来存储和检索数据。当我必须存储新的Object时,我会将整个xml取消序列化到一个List中,并将新对象添加到该List中,然后再次序列化以将其存储回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();
}
从本质上讲,序列化是正确的做法。它是健壮的、相当灵活的,而且比"手动"编写对象工作量小得多(而且更容易维护)。
但是,如果正在序列化的对象图很大,并且您希望提高进程的效率,则可能需要考虑是否可以仅序列化新对象,然后将其附加或插入到现有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读取器,或者您可能需要从数据库中检索它。