In the end, I wrote an extention method WriteSubtree
that gives this usable API:
using (var resultsXml = xml.WriteSubtree("Results"))
{
ThirdPartyLibrary.Serialise(results, resultsXml);
}
The extension method XmlWriter.WriteSubtree
is analogous to .NET's XmlReader.ReadSubtree
. It returns a special XmlWriter that checks against funny business. Its dispose method closes any tags left open.