?
Solved

Write XML Log

Posted on 2006-10-31
5
Medium Priority
?
590 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 2000 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

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

Question has a verified solution.

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

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…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This video tutorial shows you the steps to go through to set up what I believe to be the best email app on the android platform to read Exchange mail.  Get the app on your phone: The first step is to make sure you have the Samsung Email app on your …
Free Data Recovery software is an advanced solution from Kernel Tools to recover data and files such as documents, emails, database, media and pictures, etc. It supports recovery from physical & logical drive after a hard disk crash, accidental/inte…
Suggested Courses

601 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