简体   繁体   中英

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!

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

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();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM