C # XmlDocument снова записывает одно и то же

#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