Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 590
  • Last Modified:

Write XML Log

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
xenia27
Asked:
xenia27
  • 3
  • 2
1 Solution
 
NewMom2BrandonCommented:
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
 
NewMom2BrandonCommented:

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
 
xenia27Author Commented:
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
 
NewMom2BrandonCommented:
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
 
xenia27Author Commented:
Thanks for your help~ ^^
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now