如何检查元素的名称与WriteEndElement [英] How to check name of element with WriteEndElement

查看:258
本文介绍了如何检查元素的名称与WriteEndElement的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在写XML与的XmlWriter 。我的code有很多部分是这样的:

I'm writing xml with XmlWriter. My code has lots of sections like this:

xml.WriteStartElement("payload");
ThirdPartyLibrary.Serialise(results, xml);
xml.WriteEndElement(); // </payload>

的问题是, ThirdPartyLibrary.Serialise 方法是不可靠的。它可以发生(取决于具体的变量结果),它并没有关闭所有它打开的标签。因此,我WriteEndElement线是变态的,消耗闭库的挂标签,而不是写&LT; /有效载荷GT;

The problem is that the ThirdPartyLibrary.Serialise method is unreliable. It can happen (depending on the variable results) that it doesn't close all the tags it opens. As a consequence, my WriteEndElement line is perverted, consumed closing the library's hanging tags, rather than writing </payload>.

因此​​,我想提出来WriteEndElement,检查该元素的名称,并抛出一个异常,除非光标是在预期元素检查通话。

Thus I'd like to make a checked call to WriteEndElement that checks the element name, and throws an exception unless the cursor is at the expected element.

xml.WriteEndElement("payload");

您可以把它像 XmlReader.ReadStartElement(名称)会抛出,除非光标在文件中预期的地方。

You can think of this like XmlReader.ReadStartElement(name) which throws unless the cursor is at the expected place in the document.

我怎样才能做到这一点?

How can I achieve this?

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

A second use case for this extension method would be to make my own code more readable and reliable.

推荐答案

在最后,我写了一个延伸的方法 WriteSubtree ,给出了可用的API:

In the end, I wrote an extention method WriteSubtree that gives this usable API:

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

扩展方法 XmlWriter.WriteSubtree 类似于.NET的 XmlReader.ReadSubtree 。它返回一个特殊的XmlWriter,检查对滑稽的生意。它的处置方法将关闭所有还在打开的标签。

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.

这篇关于如何检查元素的名称与WriteEndElement的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆