在C#中,我需要捕获XMLException,但我也必须区分它,因为它可以是Xml_InvalidRootData的,也可以是Xml_UnexpectedEOF的。
我怎样才能做到这一点?
我只能在调试器中看到别名为"ResString"的字符串。
但是我希望有多元文化的解决方案,所以字符串比较是我想尽可能避免的事情。
HResults是一样的。
如果你看看
https://referencesource.microsoft.com/#System.Runtime.Serialization/System/Xml/XmlExceptionHelper.cs
您将看到,在整个过程中,要获得(可能是本地化的(错误字符串,这是new XmlException
的唯一参数。
正如您正确指出的那样,如果您需要区分不同的异常条件以进行一些编程响应,这将没有任何帮助。
由于您不想检查字符串 - 这是一个合理的选择 - 您最好的选择可能是编写自己的XML解析器,该解析器具有所需的输出。
仔细考虑这种解析器的设计。您想要的输出不是结构化 XML,而是解释为什么它不是合法 XML 的详细报告。 例外是处理特殊情况的机制;XML 解析器的设计者认为格式错误的 XML 是一种例外情况;他们认为这种情况几乎不应该发生。由于它几乎从未发生过,而且当它发生时,程序对此无能为力,因此没有动力生成详细的报告,允许根据检测到的错误做出程序决策。
但这显然不是你的情况;你遇到的情况与XML解析器的设计者相反。您关心错误,并且希望根据不同的错误执行不同的操作,因此解析器的输出应该是错误报告,而不是XML 语法树。它根本不应该引发异常,因为在您的方案中,格式错误的 XML 文档不是异常;你期待它。
XML不是一种特别难进行词法和解析的语言(前提是您没有尝试解决">此文档是此架构的有效实例吗?"的问题,这是一个更难的问题(,因此生成错误检测词法分析和解析器应该不会花费很长时间,特别是因为您有现有 XML 解析器的源代码来指导您。 祝你好运!