【发布时间】:2013-04-05 13:49:47
【问题描述】:
我正在尝试解决与我在How to check name of element with WriteEndElement 中描述的类似问题
我使用内部和外部 XmlWriter 编写了这段代码。这个想法是关闭内部 XmlWriter 也会关闭任何由不完全可靠的第三方库挂起的标签。
var sb = new StringWriter();
using (var xml = XmlWriter.Create(sb, new XmlWriterSettings(){Indent = true}))
{
xml.WriteStartElement("root");
using (var inner = XmlWriter.Create(xml))
{
inner.WriteStartElement("payload1");
// simulate ThirdPartyLibrary.Serialise(results, inner) leaving a tag open
inner.WriteStartElement("third-party-stuff");
}
xml.WriteStartElement("payload2");
}
sb.ToString().Dump();
我希望这会产生
<root>
<payload1>
<third-party-stuff />
</payload1>
<payload2 />
</root>
但是我在应该写 <payload2> 的行上得到一个运行时错误
无效操作异常
Writer 已关闭或处于错误状态。
为什么会出现此错误?没想到关闭内部的 XmlWriter 会关闭外部的。
【问题讨论】:
-
你确定它没有在你的 ThirdPartyLibrary.Serialise(results, inner); 中被关闭吗?方法调用?
-
@Penfold 好点。更改了我上面的示例,以便您可以运行它。