Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2010, 13:06   #1
pa6kevi4
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 52
Смущение Редактирование XML

Здравствуйте! Я реализовал запись в xml файл.

Код:
   class XmlLogger : ILogger
    {
        protected string FileName = "C:\\Documents and Settings\\Admin\\Desktop\\output2.xml";
        public void Log(string message, MessageType messageType)
        {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.IndentChars = "    ";
            settings.NewLineChars = "\n";
            settings.OmitXmlDeclaration = true;
 
            using (XmlWriter output = XmlWriter.Create(FileName, settings))
            {
                output.WriteStartElement("logging");
                output.WriteElementString("log", "Message text: " + message + ", " + DateTime.Now.ToString() + ", Type: " + messageType);
                output.WriteEndElement();
                output.Flush();
            }          
                   
        }

    }
Как его отредактировать? Нужно чтобы при повторном вызове метода Log, он не создавал новый файл с новой строкой, а добавлял в старый новую.

Спасибо!
pa6kevi4 вне форума Ответить с цитированием
Старый 04.06.2010, 12:01   #2
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Копи паст моего кода, переделаешь под себя, времени нет. Посиди почитай справку, постарайся понять, что к чему, я сам тока начинаю разбираться, как с xml работать.

Код:
        /// <summary>
        /// Создать файл новостей
        /// </summary>
        /// <param name="filepath">Полный путь к файлу, включая имя файла</param>
        private void CreateNewsXMLDocument(string filepath)
        {
            XmlTextWriter xtw = new XmlTextWriter(filepath, Encoding.UTF8);
            xtw.WriteStartDocument();
            xtw.WriteStartElement("ArhiveNews");
            xtw.WriteEndElement();
            xtw.WriteEndDocument();
            xtw.Close();

            XmlDocument xmlDoc = new XmlDocument();
            FileStream fileStream = new FileStream(filepath, FileMode.Open);
            xmlDoc.Load(fileStream);

            // Создаем новую запись NewsCount c аттрибутом 1   
            XmlElement newsEl = xmlDoc.CreateElement("NewsCount"); //для подсчёта кол-ва записей
            newsEl.SetAttribute("count", "0");
            // Забиваем запись в документ   
            xmlDoc.DocumentElement.AppendChild(newsEl); //<NewsCount count="1"> </NewsCount>
            fileStream.Close();         // Закрываем поток   
            xmlDoc.Save(filepath);      // Сохраняем файл  
        }
Цитата:
<?xml version="1.0" encoding="utf-8"?>
<ArhiveNews>
<NewsCount count="0" />
</ArhiveNews>
Код:
        /// <summary>
        /// Записать новость в XML документ
        /// </summary>
        /// <param name="filepath">Полный путь к файлу, включая имя файла в который нужно записать данные</param>
        /// <param name="ID">ID номер</param>
        /// <param name="dateNews">Дата новости</param>
        /// <param name="HeaderNews">Заголовок новости</param>
        /// <param name="BodyNews">Текст новости</param>
        private void WriteNewsInXMLDocument(string filepath, int ID, DateTime dateNews, string HeaderNews, string BodyNews)
        {
            XmlDocument xmlDoc = new XmlDocument();
            FileStream fileStream = new FileStream(filepath, FileMode.Open);
            xmlDoc.Load(fileStream);

            XmlElement idEl = (XmlElement)xmlDoc.GetElementsByTagName("NewsCount")[0];
            int countNews = Convert.ToInt32(idEl.GetAttribute("count")); //Получаем количество сообщений в документе
            countNews++;
            idEl.SetAttribute("count", countNews.ToString());

            // Создаем новую запись News c аттрибутом следующего id   
            XmlElement newsEl = xmlDoc.CreateElement("News");
            newsEl.SetAttribute("id", ID.ToString());
            // Забиваем запись в документ   
            xmlDoc.DocumentElement.AppendChild(newsEl); //<News id="1"> </News>

            XmlElement dateEl = xmlDoc.CreateElement("Date");
            XmlText textDate = xmlDoc.CreateTextNode(dateNews.ToShortDateString());
            dateEl.AppendChild(textDate);
            newsEl.AppendChild(dateEl);

            XmlElement headerEl = xmlDoc.CreateElement("TextHead");
            XmlText textHeader = xmlDoc.CreateTextNode(HeaderNews);
            headerEl.AppendChild(textHeader);
            newsEl.AppendChild(headerEl);       //<News id="1">
                                                //  <TextHead>Заголовок новости</TextHead>
                                                //</News>
            XmlElement bodyEl = xmlDoc.CreateElement("TextBody");
            XmlText textBody = xmlDoc.CreateTextNode(BodyNews);
            bodyEl.AppendChild(textBody);
            newsEl.AppendChild(bodyEl);

            fileStream.Close();         // Закрываем поток   
            xmlDoc.Save(filepath); // Сохраняем файл   
        }
Путь к файлу на рабочем столе как ни крути лучше делать так:
Код:
String LogFileXml = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\output2.xml";
Далее:
Код:
if (!System.IO.File.Exists(LogFileXml)) //Можно проверять 1 раз, потом проверять чисто значение переменной флага, ну думай сам тут уже, зависит от программы.
      {
           this.CreateNewsXMLDocument(LogFileXml);
      }
      else
      {
           int countNews = this.GetNumberNewsInXMLDocument(LogFileXml); //Получаем количество сообщений в логе
           countNews++;
           this.WriteNewsInXMLDocument(LogFileXml, countNews); //продолжаем записывать в файл не затирая прошлые записи
      }

Последний раз редактировалось Casper-SC; 04.06.2010 в 17:02.
Casper-SC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Редактирование XML-playlist-а для Flash плеера Dj_SheLL Общие вопросы Delphi 4 24.04.2010 19:52
XML редактирование. BlincAttack Общие вопросы .NET 2 10.12.2009 10:23
Редактирование XML из PHP. mikhea PHP 7 04.11.2009 15:13
парсер XML, не видит XML тэги supercelt PHP 3 02.11.2009 19:18
Редактирование Valera24 Помощь студентам 9 11.06.2009 19:41