I am creating Contact Book Application.. and I am now having a problem while writing this information to an XML File...

I get "Root Element is Missing" that crashes the application while using XmlDocument.Load to load a Stream

Simply it should save all the changes when closing the form...

Here is a portion of the code where the problem happens

private void Form1_Load(object sender, EventArgs e)
            string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            if(!Directory.Exists(path + "\\Address Book - Contacts"))
                Directory.CreateDirectory(path + "\\Address Book - Contacts");
            if (!File.Exists(path + "\\Address Book - Contacts\\settings.xml"))
                XmlTextWriter xW = new XmlTextWriter(path + "\\Address Book - Contacts\\settings.xml", Encoding.UTF8);
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            XmlDocument xDoc = new XmlDocument();
            string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            xDoc.Load(path + "\\Address Book - Contacts\\settings.xml"); // Problem Happens Here <<<<<<<<<<<<<<<<<<

            XmlNode xNode = xDoc.SelectSingleNode("People"); // Prevent dumping... and write the existing new

            foreach (Person p in people)
                XmlNode xTop = xDoc.CreateElement("Person");

                XmlNode xName = xDoc.CreateElement("Name");
                XmlNode xEmail = xDoc.CreateElement("E-mail");
                XmlNode xPhone = xDoc.CreateElement("Phone Number");
                XmlNode xAddress = xDoc.CreateElement("Street Address");
                XmlNode xBirthday = xDoc.CreateElement("Birthday");
                XmlNode xNotes = xDoc.CreateElement("Additional Notes");

                xName.InnerText = p.Name;
                xEmail.InnerText = p.Email;
                xPhone.InnerText = p.Phone;
                xAddress.InnerText = p.StreetAddress;
                xBirthday.InnerText = p.Birthday.ToFileTime().ToString(); //Convert DateTime to FileTime then to String 
                xNotes.InnerText = p.Notes;
                xTop.AppendChild(xNotes);         //Append All the Information to xTop Person so each property contains information for 1 person node.

                xDoc.DocumentElement.AppendChild(xTop); // Append xTop to the Actual Document

                // (xName, xEmail, .... ) Name, Email,.... -> (xTop) Person -> (xDoc) XML File 

            xDoc.Save(path + "\\Address Book - Contacts\\settings.xml");

Could anyone help me with this quickly ??!

Thanks a lot in advance :)

Recommended Answers

Is your settings.xml malformed?
Have you looked at it (with a text editor) after you created it?

Jump to Post

All 2 Replies

Is your settings.xml malformed?
Have you looked at it (with a text editor) after you created it?

You have to surround your xml in a tag, for example:


If you have already done that them I am not too sure what to do.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.20 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.