正在检查XML中的预期结构

本文关键字:结构 检查 XML | 更新日期: 2023-09-27 18:22:02

我正在调用一个函数,该函数返回一个包含XML数据的字符串。这个函数的工作方式并不重要,但根据函数的成功与否,生成的xml可能会有所不同。

基本上,函数将返回预期的XML或错误格式的XML。以下是两个结果的基本样本。。。

成功:

<SpecificResult>
    <Something>data</Something>
</SpecificResult>

错误时:

<ErrorResult>
    <ErrorCode>1</ErrorCode>
    <ErrorMessage>An Error</ErrorMessage>
</ErrorResult>

我的系统设置方式是,我可以使用简单的转换器函数将xml字符串转换为类,但这需要我知道类类型。一旦成功,我就会知道它是SpecificResult,我可以转换。但如果发生错误,我想先检查一下。

理想的最终结果是允许类似的事情。。。

string xml = GetXML();
if(!IsError(xml))
{
   //convert to known type and process
}

所以问题是,实现IsError功能的最佳方式是什么?

我想了几个选择,但不确定我是否真的喜欢其中的任何一个。。。

  1. 检查xml字符串是否包含"<ErrorResult>"
  2. 尝试将xml转换为ErrorResult类并检查是否失败
  3. 使用XDocument或类似的内置函数来解析树并搜索ErrorResult节点

正在检查XML中的预期结构

由于GetXml()方法本质上是返回未类型化的数据,并且这里唯一安全的假设是它的结构为XML,因此断言其实际类型的最安全方法是将其解析为XML:

private bool IsError(string xml)
{
    var document = XDocument.Parse(xml);
    return document.Element("ErrorResult") != null;
}