2010-05-07 88 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

相關問題