Jeremy Beare
Jeremy Beare

Reputation: 487

C# XML: System.InvalidOperationException

I have been learning C#'s XML with a project however I keep getting the InvalidOperationException. I have put the code below

        XmlTextWriter writer = new XmlTextWriter(path, System.Text.Encoding.UTF8);
        writer.WriteStartDocument(true);
        writer.Formatting = Formatting.Indented;
        writer.Indentation = 4;

        writer.WriteStartElement("User Info");
            writer.WriteStartElement("Name");
                writer.WriteString(userName);
            writer.WriteEndElement();
            writer.WriteStartElement("Tutor Name");
                writer.WriteString(tutorName);
            writer.WriteEndElement();
        writer.WriteEndElement();

        writer.WriteStartElement("Course Data"); /*This is where the exception points to*/
            foreach (UserCourse c in courses)
            {
                String cn = c.Name;
                writer.WriteStartElement(cn);

                foreach (UserUnit u in c.Units)
                {
                    writer.WriteStartElement(u.Name.ToString());

                    foreach (UserObjective o in u.Objectives)
                    {
                        writer.WriteStartElement(o.Name.ToString());
                        writer.WriteString(o.Score.ToString());
                        writer.WriteEndElement();
                    }
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
            }
        writer.WriteEndElement();

        writer.WriteEndDocument();
        writer.Close();

Perhaps someone can see what I am doing wrong. I appreciate any help!

Upvotes: 2

Views: 418

Answers (2)

Hassan
Hassan

Reputation: 5430

XML Element names cannot contain spaces.

Refer to XML Naming Rules.

Also it seems like you should have one root element. Like CourseData should be inside UserInfo.

Checkout Fiddle

Upvotes: 3

User12345
User12345

Reputation: 1572

Is "User Info" and "Course Data" is a different entity. If it is so, I think you may encapsulate them in one entity.

            XmlTextWriter writer = new XmlTextWriter(path, System.Text.Encoding.UTF8);
            writer.WriteStartDocument(true);
            writer.Formatting = Formatting.Indented;
            writer.Indentation = 4;

            writer.WriteStartElement("My Entity"); /* It is a biggest one*/
            writer.WriteStartElement("User Info");
            writer.WriteStartElement("Name");
            writer.WriteString(userName);
            writer.WriteEndElement();
            writer.WriteStartElement("Tutor Name");
            writer.WriteString(tutorName);
            writer.WriteEndElement();
            writer.WriteEndElement();

            writer.WriteStartElement("Course Data"); /*This is where the exception points to*/
            foreach (UserCourse c in courses)
            {
                String cn = c.Name;
                writer.WriteStartElement(cn);

                foreach (UserUnit u in c.Units)
                {
                    writer.WriteStartElement(u.Name.ToString());

                    foreach (UserObjective o in u.Objectives)
                    {
                        writer.WriteStartElement(o.Name.ToString());
                        writer.WriteString(o.Score.ToString());
                        writer.WriteEndElement();
                    }
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
            writer.WriteEndElement();

            writer.WriteEndDocument();
            writer.Close();

Upvotes: 1

Related Questions