我有完全相同的例程将数据写入Xml文件,没有任何问题。在这里,我试图编写一个类实例数据,在第一行中,我得到了以下错误:
引发的异常:“System.InvalidOperationException”在System.Xml.dll中
在文档中,它说writer是关闭的。我怎么能“打开”它?
// stuff
XmlWriter writer = XmlWriter.Create(path + "\\" + this.Name);
writer.WriteStartDocument();
writer.WriteAttributeString("ID", this.Id.ToString()); // error pops here
writer.WriteAttributeString("Description", this.Description);
// other stuff发布于 2016-04-27 18:55:11
您正在尝试编写一个属性,但还没有编写一个元素。因此,基本上您需要做的是:在编写属性之前创建一个元素:
writer.WriteStartElement("book");
writer.WriteAttributeString("ID", this.Id.ToString()); // ID becomes an attribute of "book"文档中所述的是,当引发InvalidOperationException时,作者将关闭。默认情况下是开放的。
编辑:
再看一看文档
当您使用XmlWriter方法输出XML时,在调用Close方法之前,元素和属性将不会被写入。例如,如果使用XmlWriter填充XmlDocument,则在关闭XmlWriter之前,您将无法观察目标文档中的书面元素和属性。
因此,如果您希望将内容写入文件,则必须刷新或关闭作者。您可以通过显式调用(writer.Close())或--也许更好一些--使用using-statement来完成此操作,该-statement为您处理和关闭作者:
using(var writer = XmlWriter.Create(path + "\\" + this.Name))
{
writer.WriteStartDocument();
writer.WriteStartElement("book");
writer.WriteAttributeString("ID", this.Id.ToString());
// even more elements etc.
} // .Close() is called implicitly for youEdit2:
生成的XML被写入一行,因为编写空白只会浪费资源。XML可以有效地写入一行。但是,如果您希望XML能够很好地缩进并具有可读性,则必须通过XmlWriterSettings指定。
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
using(var writer = XmlWriter.Create(path + "\\" + this.Name, settings))
{
// other code...https://stackoverflow.com/questions/36898460
复制相似问题