在c#上使用WriteStartElement()创建XML文件时出现异常

本文关键字:文件 XML 异常 创建 WriteStartElement | 更新日期: 2023-09-27 18:15:48

抛出异常的代码如下

    #region Header
            if (textBox2.Text != "")
            {
                try
                {
                    xmlTW.WriteStartElement("Header");
                    xmlTW.WriteRaw(Environment.NewLine);
                    xmlTW.WriteString(textBox2.Text);
                    xmlTW.WriteRaw(Environment.NewLine);
                    xmlTW.WriteEndElement();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
            #endregion

            #region Body
            if (textBox3.Text != "")
            {
                try
                {
                    xmlTW.WriteStartElement("Rectangles");
                    xmlTW.WriteRaw(Environment.NewLine + textBox3.Text + Environment.NewLine);
                    xmlTW.WriteEndElement();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
            #endregion

所以,问题是只有当两个文本框中的一个填充了数据时,代码才会顺利运行,如果它们都包含文本,那么在WriteEndDocument();

处会出现无效操作异常。

我知道这一定是什么简单的东西,但是我就是想不出来。如有任何帮助,不胜感激。

在c#上使用WriteStartElement()创建XML文件时出现异常

格式良好的XML必须有一个单个根元素。以下是格式良好的XML:

<Header>
Some text
</Header>

是良构的,因为Header是根元素。但是,下面的语句不是格式良好的:

<Header>
Some text
</Header>
<Rectangles>
Some other text
</Rectangles>

要纠正它,你必须把它放在某个根元素中。

<myRoot>
<Header>
Some text
</Header>
<Rectangles>
Some other text
</Rectangles>
</myRoot>

需要设置XmlWriterSettings的ConformanceLevel为Fragment

这将使您能够保留您想要的xml结构,而无需添加根元素

var xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.ConformanceLevel = ConformanceLevel.Fragment;

创建你的XML,像这样写:

XmlWriter xmlTW = XmlWriter.Create("myFile.xml", xmlWriterSettings)

这个链接可以帮助你开始使用XmlWriter