C# 检查XML的预期结构

C# 检查XML的预期结构,c#,xml,validation,C#,Xml,Validation,我正在调用一个函数,该函数返回一个包含XML数据的字符串。此函数的工作方式并不重要,但根据函数的成功与否,生成的xml可能会有所不同 基本上,该函数将返回expect XML或错误格式的XML。下面是两个结果的基本示例 关于成功: <SpecificResult> <Something>data</Something> </SpecificResult> 所以问题是,实现iError函数的最佳方法是什么 我想了几个选择,但不确定我是否真的

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

基本上,该函数将返回expect XML或错误格式的XML。下面是两个结果的基本示例

关于成功:

<SpecificResult>
    <Something>data</Something>
</SpecificResult>
所以问题是,实现iError函数的最佳方法是什么

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

  • 检查xml字符串是否包含
    “”
  • 尝试将xml转换为ErrorResult类并检查是否失败
  • 使用XDocument或类似的内置函数解析树并搜索ErrorResult节点
  • 由于
    GetXml()
    方法本质上是返回非类型化数据,这里唯一安全的假设是它的结构是XML,因此断言其实际类型的最安全方法是将其解析为XML:

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

    谢谢,我觉得这个很结实。只是为了确保文档中没有明确的msdn,一次失败的
    解析
    尝试仍然会返回一个XDocument(尽管是空的)正确吗。。。另外,等待接受的答案,将等待其他人是否有任何意见;)实际上会的。但是,在这种情况下,这听起来像是一种真正的异常情况,因此您可能不希望在
    IsError(string)
    方法中处理这种情况,而是允许异常在调用链中进一步传播。
    string xml = GetXML();
    if(!IsError(xml))
    {
       //convert to known type and process
    }
    
    private bool IsError(string xml)
    {
        var document = XDocument.Parse(xml);
        return document.Element("ErrorResult") != null;
    }