如何处理响应可能符合两个 XSD 之一的基于 XML 的协议?

How to deal with a XML based protocol where the response may conform to one of two XSDs?

我必须通过协议读取和写入数据,根据服务器应用程序的错误状态,响应 XML 可能会有所不同。如果响应良好,它使用 Xml_1 和特定模式,但如果响应指示错误,它使用 Xml_2 和完全不同的模式。在我看来,好的设计是将错误状态合并到第一个模式中,但我们只是此服务的消费者,我们无权访问服务器应用程序的设计。我的解决方案是(使用 C#)将 XML 响应作为字符串读取,进行一些搜索以了解正在使用哪个 XML 模式,然后使用适当的 XML 序列化程序将对一个对象的反应。有没有更优雅的解决方案?

这两个模式的联合是否是一个有效的模式? (这通常是这种情况,例如,如果它们使用不同的名称空间,但如果它们都是 no-namespace 架构或者它们是同一架构的两个版本,则情况可能并非如此)。

如果联合是一个有效的模式,那么您可以考虑对其进行验证。

否则,查看文件开头通常就足以告诉您正在使用哪个词汇表。

可以在不验证的情况下解析 XML 文档,检查它,然后验证已解析的文档。甚至可以在单个管道中执行此操作,而无需将整个文档放入内存中。但细节取决于您使用的工具包。您已将问题标记为 C# - 我不确定使用 Microsoft 工具是否可行,但我认为使用 Saxon-CS 应该可行。 [免责声明,我的产品]。