繁体   English   中英

将新对象添加到Xml

[英]Adding new Object to Xml

我有要存储在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读取器中使用它,或者您可能需要从数据库中检索它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM