Копи паст моего кода, переделаешь под себя, времени нет. Посиди почитай справку, постарайся понять, что к чему, я сам тока начинаю разбираться, как с 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); //продолжаем записывать в файл не затирая прошлые записи
}