c# - 检查 XML 的预期结构

标签 c# xml validation

我正在调用一个返回包含 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 节点

最佳答案

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

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

关于c# - 检查 XML 的预期结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9095452/

相关文章:

java - org.xml.sax.SAXParseException : Content is not allowed in prolog

json - 如何修复预期的启动联合。在命令行上将 JSON 转换为 Avro 时得到 VALUE_NUMBER_INT?

javascript - 我可以在不同服务器上托管的 iframe 中使用 jQuery.ajax() 吗?

javascript - 从隔离范围指令中的更改更改 Controller 变量值

c# - 为 C# 做 SCP 的库

c# - 从命令行更新 .net 标准 PackageReference

Android, Preference Screen 弹窗文字颜色

c# - XML 字符串数组反序列化为不同的类型名称

C# 如何为违反 Equals 契约的类选择 Hashcode?

c# - 格式化日期字符串缩写月份