Привет
В настоящее время я работаю над программой, которая позволяет пользователю добавлять и редактировать «События» в файлы XML.
Эти события используются в компьютерной игре и выглядят так:
<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 в течение нескольких часов я понятия не имею, что может быть не так. Я надеюсь, что вы можете помочь мне там.
Заранее спасибо
Сифилис