C # Google Sitemap.xml class

I originally wrote C# class because I couldn't find a simple class for dynamically creatingthe sitemap.xml file that google and other search engines like use to crawl your site. It was written some time ago for a previous website called eFood Order. and since then I have used it several times. I think its more relevant if I post it here though.

//Written By Luke Durrant
//For www.efoodorder.com
public class GSiteMap
    {
        private XmlTextWriter writer { get; set; }

        public GSiteMap(String xmlFile)
        {
            writer = new XmlTextWriter(xmlFile, System.Text.Encoding.UTF8);
            writer.Formatting = Formatting.Indented;
            writer.WriteStartDocument();
            writer.WriteStartElement("urlset");
            writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
            writer.WriteAttributeString("xsi:schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");
            writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");

            WriteItem(new SiteMapItem
            {
                changefreq = ChangeFreq.always,
                loc = "http://www.efoodorder.com/",
                lastmod = DateTime.Now,
                priority = "1.0"
            });
            WriteItem(new SiteMapItem
            {
                changefreq = ChangeFreq.monthly,
                loc = "http://www.efoodorder.com/Account/Register",
                lastmod = DateTime.Now,
                priority = "0.8"
            });

            WriteItem(new SiteMapItem
            {
                changefreq = ChangeFreq.monthly,
                loc = "http://www.efoodorder.com/Feedback",
                lastmod = DateTime.Now,
                priority = "0.8"
            });

        }

        public void WriteItem(SiteMapItem item)
        {
            writer.WriteStartElement("url");
            writer.WriteElementString("loc", item.loc);
            writer.WriteElementString("changefreq", item.changefreq.ToString());
            writer.WriteElementString("lastmod", TimeZone.CurrentTimeZone.ToUniversalTime(item.lastmod).ToString("s") + "+00:00");
            writer.WriteElementString("priority", item.priority);
            writer.WriteEndElement(); // url
        }

        public void Finish()
        {
            writer.WriteEndElement(); // urlset
            writer.Close();
        }
    }

    public class SiteMapItem
    {
        public String loc { get; set; }
        public ChangeFreq changefreq { get; set; }
        public DateTime lastmod { get; set; }
        public String priority { get; set; }
    }

    public enum ChangeFreq
    {
        always = 0,
        hourly = 1,
        daily = 2,
        weekly = 3,
        monthly = 4,
        yearly = 5,
        never = 6
    }

Using it is quiet simple have a look below ( make sure you have read write access!)

GSiteMap sitemap = null;
            try
            {
                string SiteMapFile = @"~/sitemap.xml";
                string xmlFile = Server.MapPath(SiteMapFile);
                sitemap = new GSiteMap(xmlFile);

                List list = null;
                //Create your list of items here
                //Then just loop through them
                foreach (SiteMapItem item in list)
                {
                    sitemap.WriteItem(item);
                }

            }
            catch (Exception up)
            {
                throw up;
            }
            finally
            {
                sitemap.Finish();
            }