Solved

Write XML Log

Posted on 2006-10-31
5
582 Views
Last Modified: 2008-01-09
Hi,

I want to write a log in xml format...a simple log...just recording date and time and some context...
This is what I do...

WriteLog("Start Program...");
WriteLog("Testing 1...");
WriteLog("Testing 2...");

public void WriteLog(string logstr)
{
            XmlTextWriter   xmlWriter = new XmlTextWriter("HttpListenerLog.xml", System.Text.Encoding.UTF8);
            DateTime        dt = DateTime.Now;

            xmlWriter.Formatting = Formatting.Indented;
            xmlWriter.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
            xmlWriter.WriteStartElement("MSG");
            xmlWriter.WriteAttributeString("Time", dt.ToString());
            xmlWriter.WriteAttributeString("Msg", logstr);
           
            xmlWriter.Close();
}

Here is what I wanna see...
<?xml version='1.0' encoding='UTF-8'?>
<MSG>
<INFO Time="2006/11/1 AM 11:08:48" Msg="Start Program..." />
<INFO Time="2006/11/1 AM 11:08:50" Msg="Testing 1..."/>
</MSG>

Something like this.  How can I modify my code to do this?
0
Comment
Question by:xenia27
  • 3
  • 2
5 Comments
 
LVL 2

Expert Comment

by:NewMom2Brandon
ID: 17862134
public void WriteLog(string logstr)
{
        DateTime        dt = DateTime.Now;

        XmlTextWriter   xmlWriter = new XmlTextWriter("HttpListenerLog.xml", System.Text.Encoding.UTF8);
       
         //This is the start of the document      
            xmlWriter.Formatting = Formatting.Indented;
            xmlWriter.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");

            xmlWriter.WriteStartElement("MSG");
            xmlWriter.WriteStartElement("INFO");
            xmlWriter.WriteAttributeString("Time", dt.ToString());
            xmlWriter.WriteAttributeString("Msg", logstr);
            xmlWriter.WriteEndElement();
            xmlWriter.WriteEndElement();

         //this is the end of the document
         xmlWriter.WriteEndDocument();              
         xmlWriter.Flush();
         xmlWriter.Close();

}
0
 
LVL 2

Expert Comment

by:NewMom2Brandon
ID: 17862304

you will need to do a foreach inside your function to get all of the INFO fields.

public void WriteLog(string logstr)
{
        DateTime        dt = DateTime.Now;

        XmlTextWriter   xmlWriter = new XmlTextWriter("HttpListenerLog.xml", System.Text.Encoding.UTF8);
       
         //This is the start of the document      
            xmlWriter.Formatting = Formatting.Indented;
            xmlWriter.WriteProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");

            xmlWriter.WriteStartElement("MSG");
****Do a foreach here
            xmlWriter.WriteStartElement("INFO");
            xmlWriter.WriteAttributeString("Time", dt.ToString());
            xmlWriter.WriteAttributeString("Msg", logstr);
            xmlWriter.WriteEndElement();
*** end foreach
            xmlWriter.WriteEndElement();

         //this is the end of the document
         xmlWriter.WriteEndDocument();              
         xmlWriter.Flush();
         xmlWriter.Close();

}
0
 

Author Comment

by:xenia27
ID: 17863618
If I have something existed in HttpListenerLog.xml file and I would like to keep it in my file and add new context, how can I do so?
Thanks for your help~
0
 
LVL 2

Accepted Solution

by:
NewMom2Brandon earned 500 total points
ID: 17866597
You can do several different things you can so

1. you can move all of your data into a hashtable, then add what you need then have it write back out.

2. You can add your data into a dataset. then add to the dataset and then write it backout

3. http://www.c-sharpcorner.com/xml/InsertDatatoXMLDocument.asp

4. You can use XPath

5. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconinsertingnodesintoxmldocument.asp

6.

XmlDocument doc = new XmlDocument();
FileStream myFile = new FileStream(@"C:\blabla.xml", FileMode.Open);
doc.Load(myFile);
XmlNode root = doc.FirstChild;
//create new node
XmlElement elem = doc.CreateElement("INFO");
elem.InnerText = "this is my text to add";
//add node to the document
root.InsertAfter(elem, root.FirstChild);
0
 

Author Comment

by:xenia27
ID: 17878470
Thanks for your help~ ^^
0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
System.Speech 2 28
Close form "before" open 3 40
Web Form VB.Net  import CSV 4 39
performance tune IIS 10 on win 2016 that only runs one website 4 63
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

803 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question