C# 如何使用WriteDelete检查元素的名称

C# 如何使用WriteDelete检查元素的名称,c#,.net,extension-methods,xmlwriter,C#,.net,Extension Methods,Xmlwriter,我正在用xml编写xml。我的代码有很多类似的部分: xml.WriteStartElement("payload"); ThirdPartyLibrary.Serialise(results, xml); xml.WriteEndElement(); // </payload> 您可以像XmlReader.ReadStartElement(name)那样思考这个问题,除非光标位于文档中的预期位置,否则它会抛出 我怎样才能做到这一点 编辑:这个扩展方法的第二个用例是使我自己的代码

我正在用xml编写xml。我的代码有很多类似的部分:

xml.WriteStartElement("payload");
ThirdPartyLibrary.Serialise(results, xml);
xml.WriteEndElement(); // </payload>
您可以像
XmlReader.ReadStartElement(name)
那样思考这个问题,除非光标位于文档中的预期位置,否则它会抛出

我怎样才能做到这一点



编辑:这个扩展方法的第二个用例是使我自己的代码更可读、更可靠。

XMLWriter只是在流中写入给定的xml信息,而不进行任何验证。如果它在编写xml标记时进行任何验证,那么在创建大xml文件时就会出现性能问题

使用XMLWriter创建XML文件由开发人员承担风险。如果您想进行任何此类验证,可以使用XMLDocument

如果确实希望在XMLWriter中执行此验证,则必须使用String或StringBuilder创建编写器。因为,如果使用流或TexWrrter,则无法读取在写入中间写入流的信息。在XML的每次更新中,您都必须读取字符串并编写自己的方法来验证写入的信息


我建议您使用XMLDocument来创建这些类型的xml。

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

using (var resultsXml = xml.WriteSubtree("Results"))
{
    ThirdPartyLibrary.Serialise(results, resultsXml);
}

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

能否将一个新的
XmlWriter
发送到
ThirdPartyLibrary.Serialise
并在将其添加到
xml
对象之前检查其明确性?在将其传递到
Serialise
之前,能否以某种方式验证
结果
?(即,当您传入某些类型的结果时,您是否可以重新设置serialise方法的中断)@KeyboardP-第三方库实际上是一个用户提供的插件,实现了一个接口,因此不值得信任。
using (var resultsXml = xml.WriteSubtree("Results"))
{
    ThirdPartyLibrary.Serialise(results, resultsXml);
}