保存xml文件和conformance级别

本文关键字:conformance 级别 文件 xml 保存 | 更新日期: 2023-09-27 18:19:14

我有一个方法,应该保存对象列表到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"发生在…

附加信息:Token EndElement状态为EndRootElement导致无效的XML文档。确保conformance级别setting设置为ConformanceLevel。片段或一致性级别。汽车如果你想写一个XML片段

已尝试使用conformance级别。片段,但我得到例外,我应该使用conformance水平。自动保存xml文件

保存xml文件和conformance级别

错误信息为:

令牌EndElement处于EndRootElement状态会导致无效的XML文档。

换句话说,当没有其他东西可以关闭时(您已经到达文档根目录),您试图写一个结束元素。

因此,请查看关闭元素的位置:

writer.WriteEndElement();
writer.WriteEndElement();

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

writer.WriteStartDocument();
writer.WriteStartElement("Countries");

WriteStartDocument不开始Xml元素,它只是写文档Xml声明(例如<?xml version="1.0" encoding="UTF-8"?>)。

删除第二个writer.WriteEndElement();,你应该没事。

on last EndElement声明使用

 writer.WriteEndDocument();  

代替writer.WriteEndElement();