#c# #xml
#c# #xml
Вопрос:
В моем приложении генерируется много данных, которые затем записываются в XML-файл с использованием XmlDocument. Механизм работает нормально, но когда я снова и снова вызываю функцию, которая сериализует данные для записи в новый XML, она копирует то, что было написано ранее, в новый XML плюс новые данные!
Я не понимаю, я вызываю XmlDocument doc = new XmlDocument() в начале функции, которая сериализует…
private static Boolean SaveParsedDataAsXML(ParsedData DataParsed, String Name)
{
try
{
XmlDocument doc = new XmlDocument();
XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
doc.AppendChild(xmlnode);
XmlElement generalVariables = doc.CreateElement("Variables");
generalVariables.AppendChild(SerializeElement(doc, "Path", DataParsed.Path));
.
.
.
XmlElement chatMessages = doc.CreateElement("ChatMessages");
foreach (Message mess in DataParsed.ChatMessages)
{
XmlElement singleMess = doc.CreateElement("SingleMessage");
singleMess.AppendChild(SerializeElement(doc, "MessageID", mess.MessageID.ToString()));
singleMess.AppendChild(SerializeElement(doc, "MessageName", mess.MessageName));
singleMess.AppendChild(SerializeElement(doc, "MessageTime", mess.MessageTime.ToString()));
singleMess.AppendChild(SerializeElement(doc, "MessageContent", mess.MessageContent));
singleMess.AppendChild(SerializeElement(doc, "MessageTarget", mess.MessageTarget.ToString()));
chatMessages.AppendChild(singleMess);
}
generalVariables.AppendChild(chatMessages);
.
.
.
doc.AppendChild(generalVariables);
//Saving and returning true, serialization successful.
doc.Save(OutputPath "\" ReplayName ".xml");
return true;
}
catch
{
return false;
}
}
Ответ №1:
Я предполагаю, что вы не очищаете обработанные данные.ChatMessages создает объект перед тем, как вы передадите его в опубликованную вами функцию.
Вы уверены, что каждый раз используете новый объект с разделением данных? Или вы повторно используете тот же экземпляр и добавляете к нему больше сообщений?
Комментарии:
1. Да, ParsedData dataParsed = new ParsedData(); dataParsed = parserApe.ParseReplay(replayFilePath);
2. Это была внутренняя функция, которая анализирует данные, которые не создали новый экземпляр ParsedData