保存XML文件和符合级别

3
我有一个方法,应该将对象列表保存到xml文件中。
 private void DumpToXMLFile(List<Url> urls, string fileName)
        {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.OmitXmlDeclaration = true;
            settings.NewLineOnAttributes = true;
            settings.ConformanceLevel = ConformanceLevel.Auto;

            using (XmlWriter writer = XmlWriter.Create(fileName, settings))
            {
                writer.WriteStartDocument();
                writer.WriteStartElement("Countries");
                foreach (var url in urls)
                {
                    writer.WriteStartElement("Country");
                        writer.WriteElementString("Name", url.Name);                        
                        writer.WriteElementString("Url", url.Uri);
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
                writer.WriteEndElement();                
            }
        }

我遇到了这个异常:
未经处理的类型为'System.InvalidOperationException'的异常在...中发生。
附加信息:状态为EndRootElement的EndElement标记将导致无效的XML文档。如果您要编写XML片段,请确保将ConformanceLevel设置为ConformanceLevel.Fragment或ConformanceLevel.Auto。
我已尝试使用ConformanceLevel.Fragment,但是我得到了一个异常,告诉我如果想要保存XML文件,应该使用ConformanceLevel.Auto。
2个回答

5
错误信息如下:

在EndRootElement状态中使用Token EndElement 会导致无效的XML文档。

换句话说,当你已经到达文档根时,尝试写入结束元素,但没有其他需要关闭的内容。
因此,请检查您关闭任何元素的位置:
writer.WriteEndElement();
writer.WriteEndElement();

您关闭了两个元素,但只打开了一个元素(<Countries>):

writer.WriteStartDocument();
writer.WriteStartElement("Countries");
< p > WriteStartDocument 方法并不会开始一个 Xml 元素,它只是写入文档的 Xml 声明(例如:<?xml version="1.0" encoding="UTF-8"?>)。

移除第二个 writer.WriteEndElement(); 即可解决问题。


1
在最后的EndElement声明中使用


 writer.WriteEndDocument();  

替换为 writer.WriteEndElement();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接