Я пытаюсь решить проблему, аналогичную описанной на странице Как проверьте имя элемента с помощью 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 Скриншот, модуль записи закрыт или находится в состоянии ошибки.
Почему я получаю эту ошибку? Я не ожидал, что закрытие внутреннего XmlWriter приведет к закрытию внешнего.