我可以帮您翻译成中文:在哪里可以找到XmlException可能包含的所有可能信息列表?

4
我正在编写一个XML代码编辑器,并希望在用户界面中显示语法错误。由于我的代码编辑器受到特定问题领域和受众的严格限制,我想要重写某些XMLException消息,使其对用户更有意义。举个例子,像这样的异常消息:
'"'是意外的标记。期待的标记是'='。第30行,第35个位置
... 对我的受众来说很技术化,也不太有信息量。相反,我想将它和其他消息重新编写成其他形式。为了完整起见,这意味着我需要建立一个现有消息词典,将其映射到我想要显示的新消息。为了实现这一点,我需要列出XMLException可能包含的所有可能的消息。
是否有这样的列表?或者我可以通过检查C#对象获得可能的消息?
编辑:具体而言,我正在使用XmlDocument.LoadXml将字符串解析为XmlDocument,当存在语法错误时,该方法会引发XmlException。所以具体来说,我的问题是在哪里可以找到XmlDocument.LoadXml所应用的XmlException消息列表。对于XmlException的Message属性实际字符串可能有无限变化的讨论是无意义的。
编辑2:更具体地说,我不是在寻求是否应该尝试此操作的建议;我只是在寻找任何获得各种消息的线索。Ben的答案是朝着正确方向迈出的一步。还有其他方法吗?

XmlException 中的 Message 属性也可以国际化,这进一步使问题复杂化,因为每种异常类型对应每种语言都有一个消息。 - Björn Lindqvist
2个回答

2
从技术上讲,并不存在这样的事情,任何抛出XmlException的类都可以将消息设置为任何字符串。实际上,这取决于您使用的类以及它们如何处理异常。完全有可能您正在使用一个包含上下文特定信息的类,例如有关某些格式不正确的XML节点或属性的信息。在这种情况下,根据正在处理的XML,唯一消息字符串的数量可能是无限的。同样可能的是,特定类不按照这种方式工作,并且在特定情况下会发生有限数量的消息。也许更好的方法是在代码的特定部分中使用try/catch块,在那里您了解正在进行的处理,并基于正在发生的情况提供更通用的错误消息。例如,在您的示例中,您可以简单地查看行号和字符号并生成类似“处理xml文件LineX CharacterY时出错”的错误,甚至是像“处理文件时出错”的一般性错误。
编辑:
根据您的编辑,我认为您将会遇到麻烦。本质上,您正在尝试根据可能存在于字符串中的某些关键字将文本字符串更改为另一个文本字符串。这很可能会导致混乱和不一致。如果您真的想要这样做,我建议使用类似Redgate .net Reflector的工具来反射loadXML方法,并深入挖掘代码,以查看它如何处理XML中不同类型的语法错误以及它基于发现的什么样的错误生成哪种消息。这可能会非常耗时和困难。如果您想隐藏技术错误但仍然向用户提供有用的信息,则仍建议忽略错误消息并简单地指向文件中问题的位置。

谢谢你的反射器提示,我会研究一下。 - Rahul

-1

这只是我的个人意见,但是……在向用户显示错误消息之前,对其进行拼写检查并更改它们似乎是一个非常错误的想法。

首先,每种国际语言的消息都不同。即使您可以为英语收集它们,并且愿意承担成本,它们也会因其他语言而异。

其次,即使您正在处理单个语言,也无法确定外部包是否已将新的XmlException注入到LoadXml范围内。

最后,消息列表不稳定。它可能会从版本到版本发生变化。

更好的想法是仅从您自己的应用程序中发出适当的消息,并在需要时(可能是按需)显示包含在XmlException中的原始错误消息。


在这种情况下,语言不是问题。这是一个托管环境,在其中我可以控制异常使用的语言。鉴于我控制环境,我还知道没有外部因素会影响我的代码中异常消息的内容。最后,如果语言在新版本中更改,这可能不经常发生,我将更新映射以正确翻译新的异常。 - Rahul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接