4

我正在编写一个 XML 代码编辑器,我想在用户界面中显示语法错误。因为我的代码编辑器严格限制于特定的问题域和受众,所以我想重写某些 XMLException 消息以对用户更有意义。例如,这样的异常消息:

'"' 是一个意外的标记。预期的标记是 '='。第 30 行,第 35 位

.. 技术性很强,对我的听众来说信息量不大。相反,我想将它和其他消息重写为其他内容。为了完整起见,这意味着我需要建立一个映射到我想显示的新消息的现有消息字典。为了实现这一点,我需要一个 XMLException 可以包含的所有可能消息的列表。

某处有这样的清单吗?或者我可以通过检查 C# 中的对象找出可能的消息吗?


编辑:具体来说,我正在使用 XmlDocument.LoadXml 将字符串解析为 XmlDocument,当出现语法错误时,该方法会引发 XmlException。所以具体来说,我的问题是在哪里可以找到 XmlDocument.LoadXml 应用于 XmlException 的消息列表。关于 XmlException 的 Message 属性中实际字符串可能存在无限变化的讨论没有实际意义。

编辑2:更具体地说,我不是在寻求关于我是否应该尝试这个的建议;我只是在寻找任何线索来获取各种消息。本的回答是朝着正确方向迈出的一步。有谁知道另一种方式?

4

2 回答 2

2

从技术上讲,没有这样的事情,任何抛出 XmlException 的类都可以将消息设置为任何字符串。实际上,这取决于您使用的是哪些类,以及它们如何处理异常。您很可能正在使用一个在消息中包含特定于上下文的信息的类,例如有关某些 xml 节点或格式错误的属性的信息。在这种情况下,unqiue 消息字符串的数量可能是无限的,具体取决于正在处理的 XML。同样可能的是,特定类不以这种方式工作,并且在特定情况下发生的消息数量有限。也许更好的方法是在代码的特定部分使用 try/catch 块,您可以在其中了解正在发生的处理并根据发生的情况提供更通用的错误消息。例如

编辑:

除了您的编辑,我认为您将无法按照您的要求进行操作。本质上,您正在尝试根据字符串中可能存在的某些关键字将文本字符串更改为另一个文本字符串。这可能是混乱和不一致的。如果您真的想这样做,我建议您使用 Redgate .net Reflector 之类的东西来反映 loadXML 方法并深入研究代码以查看它如何处理 XML 中的不同类型的语法错误以及它生成的消息类型基于它发现什么样的错误。这可能是耗时且困难的。如果您想隐藏技术错误但仍向用户提供有用的信息,那么我仍然建议忽略错误消息并简单地将用户指向文件中问题的位置。

于 2010-05-07T13:17:45.707 回答
-1

只是我的意见,但是......在向用户显示错误消息之前对其进行深入研究并对其进行更改似乎是一个真正被误导的想法。

首先,每种国际语言的信息都不同。即使您可以为英语收集它们,并且您愿意支付费用,它们对于其他语言也会有所不同。

其次,即使您正在处理一种语言,也无法确定外部包没有将新的 XmlException 注入到 LoadXml 的范围内。

最后,消息列表不稳定。它可能会因版本而异。

一个更好的主意是从您自己的应用程序中发出一条适当的消息,并选择性地显示(可能根据需要)包含在 XmlException 中的原始错误消息。

于 2010-05-07T18:28:27.970 回答