在C#中编辑XML文件时出现问题

|| 你好 我目前正在开发一个程序,该程序允许用户向XML文件添加和编辑“事件”。 这些事件用于PC游戏中,如下所示:
<Event Name=\"some_name\">
    <Event_Type>TYPE</Event_Type>
    <Event_Param1>parameter1</Event_Param1>
    <Event_Param2>parameter2</Event_Param2>
    ...
    <Reward_Type>TYPE</Reward_Type>
    <Reward_Param1>parameter1</Reward_Param2>
    ...
    <Prereq>Prerequisite</Prereq>
    <Branch></Branch>
    <Perpetual>true</Perpetual>
</Event>
现在,该程序允许用户添加和编辑事件,然后使用treeView工具显示这些事件。 当我尝试覆盖现有的XML文件时,会发生我的问题。 我已经可以打开一个现有文件,并且所有数据正确显示在treeView中。 现在,我添加到文件中的所有事件都保存完了,但是文件中已经存在的事件的所有数据都丢失了,只有这些空标记保留了:
<Event Name=\"name\" />
好吧,这是我的代码:
DialogResult result = saveFileDialog1.ShowDialog();
        if (result == DialogResult.OK)
        {
            string save = saveFileDialog1.FileName;



            XmlDocument doc = new XmlDocument();
            XmlElement root = doc.CreateElement(\"Story\");

            for (int i = 0; i < treeView1.Nodes.Count; i++)
            {

                TreeNode subnode = treeView1.Nodes[i];


                XmlElement new_event = doc.CreateElement(\"Event\");
                XmlAttribute attr = doc.CreateAttribute(\"Name\");
                attr.Value = subnode.Text;
                new_event.Attributes.Append(attr);

                root.AppendChild(new_event);

                    for (int j = 0; j < subnode.Nodes.Count; j++)
                    {
                        TreeNode type_node = subnode.Nodes[j];
                        if (type_node.ToolTipText == \"Event Type\")
                        {
                            XmlElement event_type = doc.CreateElement(\"Event_Type\");
                            event_type.InnerText = type_node.Text;
                            new_event.AppendChild(event_type);

                            if (type_node.Nodes.Count > 0)
                            {
                                for (int k = 0; k < type_node.Nodes.Count; k++)
                                {
                                    TreeNode param_node = type_node.Nodes[k];

                                    XmlElement param = doc.CreateElement(\"Event_Param\" + (k + 1));
                                    param.InnerText = param_node.Text;

                                    new_event.AppendChild(param);
                                }

                            }

                        }

                        else if (type_node.ToolTipText == \"Reward Type\")
                        {
                            XmlElement reward_type = doc.CreateElement(\"Reward_Type\");
                            reward_type.InnerText = type_node.Text;
                            new_event.AppendChild(reward_type);

                            if (type_node.Nodes.Count > 0)
                            {
                                for (int k = 0; k < type_node.Nodes.Count; k++)
                                {
                                    TreeNode param_node = type_node.Nodes[k];

                                    XmlElement param = doc.CreateElement(\"Reward_Param\" + (k + 1));
                                    param.InnerText = param_node.Text;

                                    new_event.AppendChild(param);
                                }

                            }

                        }

                        else if (type_node.ToolTipText == \"Prereq\")
                        {
                            XmlElement prereq = doc.CreateElement(\"Prereq\");
                            prereq.InnerText = type_node.Text;
                            new_event.AppendChild(prereq);
                        }

                        else if (type_node.ToolTipText == \"Branch\")
                        {
                            XmlElement branch = doc.CreateElement(\"Branch\");
                            branch.InnerText = type_node.Text;
                            new_event.AppendChild(branch);

                        }

                        else if (type_node.ToolTipText == \"Perpetual\")
                        {
                            XmlElement perpetual = doc.CreateElement(\"Perpetual\");
                            perpetual.InnerText = type_node.Text;
                            new_event.AppendChild(perpetual);
                        }



                    }                            
            }
            doc.AppendChild(root);
            FileStream fs = new FileStream(save, FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite);
            doc.Save(fs);
我对C#和一般程序设计还很陌生,即使在搜索了Google几个小时之后,我也不知道有什么问题。我希望你能帮助我。 提前致谢 痘     
已邀请:
您绝对不会加载原始文件,因此将完全替换原始文件,而没有任何旧数据。看
.Load(path)
。另外,您还没有关闭
FileStream
,老实说,仅
.Save(path)
就更容易了。     

要回复问题请先登录注册