0

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 を閉じるとは思っていませんでした。

4

2 に答える 2