保存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文件
错误信息为:
令牌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();