如何使用WriteEndElement检查元素的名称

Col*_*nic 7 .net c# extension-methods xmlwriter

我正在用XmlWriter编写xml .我的代码有很多这样的部分:

xml.WriteStartElement("payload");
ThirdPartyLibrary.Serialise(results, xml);
xml.WriteEndElement(); // </payload>
Run Code Online (Sandbox Code Playgroud)

问题是该ThirdPartyLibrary.Serialise方法不可靠.它可能发生(取决于变量results)它不会关闭它打开的所有标签.结果,我的WriteEndElement行被变态,消耗了关闭库的悬挂标签,而不是写</payload>.

因此,我想对WriteEndElement进行一次检查,检查元素名称,并抛出异常,除非光标位于预期的元素.

xml.WriteEndElement("payload");
Run Code Online (Sandbox Code Playgroud)

XmlReader.ReadStartElement(name)除非光标位于文档中的预期位置,否则您可以将其视为抛出.

我怎样才能做到这一点?


编辑:此扩展方法的第二个用例是使我自己的代码更具可读性和可靠性.

Col*_*nic 0

最后,我编写了一个扩展方法WriteSubtree,提供了这个可用的 API:

using (var resultsXml = xml.WriteSubtree("Results"))
{
    ThirdPartyLibrary.Serialise(results, resultsXml);
}
Run Code Online (Sandbox Code Playgroud)

扩展方法XmlWriter.WriteSubtree类似于 .NET 的XmlReader.ReadSubtree. 它返回一个特殊的 XmlWriter,用于检查有趣的事情。它的 dispose 方法会关闭所有打开的标签。