我正在尝试解决与我在如何使用 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>
InvalidOperationException
Writer 已关闭或处于错误状态。
为什么我会收到此错误?我没想到关闭内部 XmlWriter 会关闭外部 XmlWriter。