首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xml : InvalidOperationException

Xml : InvalidOperationException
EN

Stack Overflow用户
提问于 2016-04-27 18:51:23
回答 1查看 985关注 0票数 1

我有完全相同的例程将数据写入Xml文件,没有任何问题。在这里,我试图编写一个类实例数据,在第一行中,我得到了以下错误:

引发的异常:“System.InvalidOperationException”在System.Xml.dll中

文档中,它说writer是关闭的。我怎么能“打开”它?

代码语言:javascript
复制
// 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-27 18:55:11

您正在尝试编写一个属性,但还没有编写一个元素。因此,基本上您需要做的是:在编写属性之前创建一个元素:

代码语言:javascript
复制
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为您处理和关闭作者:

代码语言:javascript
复制
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 you

Edit2:

生成的XML被写入一行,因为编写空白只会浪费资源。XML可以有效地写入一行。但是,如果您希望XML能够很好地缩进并具有可读性,则必须通过XmlWriterSettings指定。

代码语言:javascript
复制
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;

using(var writer = XmlWriter.Create(path + "\\" + this.Name, settings))
{
    // other code...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36898460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档