2010-05-07 41 views
4

我在写一个XML代码编辑器,我想在用户界面中显示语法错误。由于我的代码编辑器强烈限制于特定的问题域和受众,因此我想重写某些XMLException消息对用户更有意义。举例来说,像这样的异常消息:我在哪里可以找到XmlException可以包含的所有可能消息的列表?

'“是一个意外标记的 预期令牌是 '=' 第30行, 位置35

..是非常技术性的和。对我的观众来说不是很有用,相反,我想重写它和其他信息给其他的东西。为了完整起见,这意味着我需要建立一个映射到我希望显示的新消息的现有消息的字典。为了实现这一点,我需要一个XMLException可以包含的所有可能消息的列表。

某处是否有这样的列表?或者我可以通过检查C#中的对象来找出可能的消息吗?


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

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

+0

XmlException中的Message属性也可以被国际化,这进一步复杂化了这个问题,因为对于每种异常类型,每种语言都有一条消息。 – 2011-08-29 09:44:11

回答

2

从技术上讲没有这样的事情,任何引发XmlException的类都可以将消息设置为任何字符串。真的取决于你正在使用哪些类,以及它们如何处理异常。您可能正在使用包含消息中特定于上下文的信息的类,例如,有关xml节点或属性格式不正确的信息。在这种情况下,取决于正在处理的XML,unqiue消息字符串的数量可能是无限的。同样可能的是,一个特定的类不以这种方式工作,并且在特定情况下具有有限数量的消息。也许更好的办法是在你的代码的特定部分使用try/catch块,在那里你了解正在发生的处理过程,并根据正在发生的事情提供更一般的错误消息。例如。在你的例子中,你可以简单地查看行和字符编号,并沿着“错误处理xml文件LineX CharacterY”或甚至像“错误处理文件”一般的东西产生错误。

编辑:

而且您的编辑,我认为你会遇到麻烦做你所需要的。基本上,您正试图将文本字符串更改为另一个文本字符串,该字符串基于某些可能位于字符串中的关键字。这可能是混乱和不一致的。如果你真的想这样做,我会建议使用类似Redgate .net Reflector的东西来反映出loadXML方法,并深入了解代码,以了解它如何处理XML中不同类型的语法错误以及它基于它发现了什么样的错误。这可能是耗时和困难的。如果你想隐藏技术错误,但仍然向用户提供有用的信息,那么我仍然会建议忽略错误消息,并简单地将用户指向文件中问题的位置。

+0

好点,我修改了我的帖子。 – Rahul 2010-05-07 13:24:02

+0

谢谢你的反射头,我会研究它。 – Rahul 2010-05-09 12:01:23

-1

只是我的看法,但是......在显示错误消息并改变它们给用户之前改变它们看起来像是一个非常错误的想法。

首先,每种国际语言的信息是不同的。即使你可以收集他们的英文,并且你愿意付出代价,他们会因其他语言而不同。第二,即使你在处理单一语言,也没有办法确定外部包没有在LoadXml的范围内注入新颖的XmlException。

最后,消息列表不稳定。它可能会从发布到发布。

一个更好的主意是从你自己的应用程序发出一个适当的消息,并且可以根据需要显示 - 可能是按需要的 - 包含在XmlException中的原始错误消息。

+0

语言在这种情况下不是问题。这是一个托管环境,我可以控制在例外情况下使用的语言。考虑到我控制着环境,我也知道没有任何外部因素会影响我的代码中异常消息的内容。最后,如果语言在新版本中发生变化(可能不会经常发生),我将更新映射以正确翻译新的异常。 – Rahul 2010-05-09 11:59:22

相关问题