我正在编写XML代码编辑器,我想在用户界面中显示语法错误。由于我的代码编辑器受到特定问题域和受众的强烈约束,我想重写某些XMLException消息对用户更有意义。例如,像这样的异常消息:
'“'是一个意想不到的令牌 预期令牌是'='。 30号线, 第35位
..非常技术性,对我的观众来说信息量不大。相反,我想将它和其他消息重写为其他内容。为了完整性,这意味着我需要建立映射到我想要显示的新消息的现有消息的字典。为了实现这一点,我需要一个XMLException可以包含的所有可能消息的列表。
某处有这样的清单吗?或者我可以通过检查C#中的对象来找出可能的消息吗?
编辑:具体来说,我使用XmlDocument.LoadXml将字符串解析为XmlDocument,并且当语法错误时该方法抛出XmlException。具体来说,我的问题是我可以在哪里找到XmlDocument.LoadXml应用于XmlException的消息列表。关于XmlException的Message属性中可能存在无限的实际字符串变化的讨论是没有意义的。
编辑2:更具体地说,我没有寻求建议,我是否应该尝试这个;我只是想找到获取各种消息的方法的任何线索。本的答案是朝着正确方向迈出的一步。有谁知道另一种方式?
答案 0 :(得分:2)
从技术上讲,没有这样的东西,任何抛出XmlException的类都可以将消息设置为任何字符串。真的,这取决于您使用的是哪些类,以及它们如何处理异常。您可能正在使用包含消息中特定于上下文的信息的类,例如,有关某些xml节点或格式错误的属性的信息。在这种情况下,取决于正在处理的XML,unqiue消息字符串的数量可能是无限的。同样可能的是,特定类不以这种方式工作,并且具有在特定情况下发生的有限数量的消息。也许更好的方法是在代码的特定部分使用try / catch块,在那里您了解正在发生的处理并根据发生的情况提供更多通用错误消息。例如。在您的示例中,您可以简单地查看行和字符编号,并在“处理xml文件LineX CharacterY时出错”或甚至像“错误处理文件”这样的常规内容中产生错误。
编辑:
在您的编辑之后,我认为您将无法满足您的需求。实际上,您正在尝试根据字符串中的某些关键字将文本字符串更改为另一个文本字符串。这可能是混乱和不一致的。如果你真的想这样做,我建议使用像Redgate .net Reflector这样的东西来反映loadXML方法,并深入研究代码,看看它如何处理XML中的各种语法错误以及它基于什么样的消息生成它发现了什么样的错误。这可能是耗时且困难的。如果你想隐藏技术错误但仍然向用户提供有用的信息,那么我仍然会建议忽略错误消息并简单地将用户指向文件中问题的位置。
答案 1 :(得分:-1)
仅仅是我的观点,但是......在向用户显示错误消息之前对其进行修改并改变它们似乎是一个非常错误的想法。
首先,每种国际语言的信息都不同。即使你可以收集他们的英语,并且你愿意支付费用,他们对其他语言也会有所不同。
其次,即使您正在使用单一语言,也无法确保外部包没有将新的XmlException注入到LoadXml的范围内。
最后,消息列表不稳定。它可能会在发布之间发生变化。
更好的想法是从您自己的应用程序发出适当的消息,并可选择显示 - 可能是按需 - XmlException中包含的原始错误消息。