检查XML以获得预期的结构

mus*_*fan 6 c# xml validation

我正在调用一个返回包含XML数据的字符串的函数.此函数的工作原理并不重要,但生成的xml可能会有所不同,具体取决于函数的成功与否.

基本上该函数将返回expect XML或错误格式的XML.以下是两个结果可能看起来的基本样本......

成功:

<SpecificResult>
    <Something>data</Something>
</SpecificResult>
Run Code Online (Sandbox Code Playgroud)

出错:

<ErrorResult>
    <ErrorCode>1</ErrorCode>
    <ErrorMessage>An Error</ErrorMessage>
</ErrorResult>
Run Code Online (Sandbox Code Playgroud)

我的系统设置方式是我可以将xml字符串转换为具有简单转换器函数的类,但这需要我知道类类型.成功之后,我会知道它是SpecificResult,我可以转换.但我想首先检查是否发生错误.

理想的最终结果将允许类似于此...

string xml = GetXML();
if(!IsError(xml))
{
   //convert to known type and process
}
Run Code Online (Sandbox Code Playgroud)

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

我想过几个选项,但不确定我是否真的喜欢它们......

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

Enr*_*lio 5

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

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