XML 停止覆盖/保存多个条目

Posted

技术标签:

【中文标题】XML 停止覆盖/保存多个条目【英文标题】:XML stop overwriting/save multiple entries 【发布时间】:2020-08-21 10:58:43 【问题描述】:

目前我正在使用此代码创建 XML 文件

       
           XmlSerializer sr = new XmlSerializer(obj.GetType());
           TextWriter writer = new StreamWriter(filename);
           sr.Serialize(writer, obj);
           writer.Close();
       

问题是它总是覆盖我之前输入的条目。如何创建多个条目并保存它们(可能在 Combobox/DropDownList 中?)。

这是我的代码的其余部分 (btnSave btnLoad)

        
            try
            
                Daten daten = new Daten();

                daten.GAME = txtGame.Text;
                daten.PLATFORM = txtPlatform.Text;
                daten.RELEASED = txtReleased.Text;

                SaveData.SaveDaten(daten, "gameregister.xml");

            
            catch (Exception exception)
            
                MessageBox.Show(exception.Message);
            
        

        private void btnLoad_Click(object sender, EventArgs e)
        
            if (File.Exists("gameregister.xml"))
            
                XmlSerializer xs = new XmlSerializer(typeof(Daten));
                FileStream read = new FileStream("gameregister.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
                Daten daten = (Daten)xs.Deserialize(read);

                txtGame.Text = daten.GAME;
                txtPlatform.Text = daten.PLATFORM;
                txtReleased.Text = daten.RELEASED;

                read.Close();
            
        

ps:我必须使用 XML 来完成这个特定的任务。

【问题讨论】:

这是否意味着,您想在一个 xml 文件中保存多个 Daten 实例?您知道,XML 需要有一个唯一的根元素,因此您不能只是将另一个根元素附加到同一个文件中。这意味着:您需要有一个Daten 的“集合”,您可以将其添加到其中,您可以从中删除、编辑……然后总是 全部保存或不保存。毕竟这是一个文本文件。 是的,Daten 是我的公开课(包括GAME, PLATFORM, RELEASED)@Fildor 你对 Collection 的理解是什么?我之前使用文本文件完成了所有这些,但现在他们告诉我使用 XML 文件来完成。感谢您的回复! BTW:观察到行为的原因:“路径参数可以是文件名,包括通用命名约定 (UNC) 共享上的文件。如果文件存在,它会被覆盖; 否则,会创建一个新文件。” - StreamWriter(string)(我强调) 太好了,如果您的模型由Daten 表示,那么您需要例如List<Daten>,您将在xml 中写入和读取。然后,您可以浏览该列表、添加、删除、编辑条目。 如何编写该代码? 【参考方案1】:

对于您的问题,您希望将多个实例序列化为 XML。

你可以试试下面的代码来获取它。

   Private void BtnSave_Click(object sender,EventArgs e)
    
    Daten daten=new Daten();
    daten.GAME=txtGame.Text;
    daten.PLATFORM=txtPlatform.Text;
    datem.RELEASED=txtReleased.Text;
    List<Daten> lisrt=new List<Daten>();
    String path=”d:\\gameregister.xml”;
    if(File.Exists(path))
    
    StreamReader read=new StreamReader(path);
    XmlSerializer xc=new XmlSerializer(typeof(List<Daten>));
    list=(List<Daten>)xc.Deserialize(read);
    read.Close();
    Textwriter writer=new StreamWriter(path);
    list.Add(daten);
    xc.Serialize(writer,list);
    writer.Close();
    MessageBox.Show(“Serialization succeeded again!;”);
    
    else
    
    list.Add(daten);
    XmlSerializer xs=new XmlSerializer(typeof(List<Daten>));
    Textwriter writer=new StreamWriter(path);
    xs.Serialize(writer,list);
    writer.Close();
    MessageBox.Show(“Serialization successful!”);
    
   

【讨论】:

以上是关于XML 停止覆盖/保存多个条目的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖 createView 以保存多个数据条目

在 typeORM 中的 @ManyToMany 中保存关系会覆盖先前的条目

将输出保存到文本文件而不覆盖和打印矩阵中的 N 个条目 [matlab]

新的数据条目会覆盖列中所有过去的条目,我该如何更正?

不覆盖 C# 窗口窗体中保存的 xml 文件

如何停止覆盖数据