4

XML コード エディターを作成していて、ユーザー インターフェイスに構文エラーを表示したいと考えています。私のコード エディターは特定の問題領域と対象ユーザーに強く制限されているため、特定の XMLException メッセージをユーザーにとってより意味のあるものに書き換えたいと考えています。たとえば、次のような例外メッセージ:

'"' は予期しないトークンです。予期されるトークンは '=' です。行 30、位置 35

.. 非常に技術的で、聴衆にとってあまり有益ではありません。代わりに、それと他のメッセージを別のものに書き直したいと思います。完全を期すために、代わりに表示したい新しいメッセージにマップされた既存のメッセージの辞書を作成する必要があります。これを実現するには、XMLException に含めることができるすべてのメッセージのリストが必要になります。

そのようなリストはどこかにありますか?または、C# でオブジェクトを検査して、考えられるメッセージを見つけることはできますか?


編集: 具体的には、XmlDocument.LoadXml を使用して文字列を XmlDocument に解析しています。構文エラーがあると、そのメソッドは XmlException をスローします。具体的には、私の質問は、XmlDocument.LoadXml によって XmlException に適用されるメッセージのリストを見つけることができる場所です。XmlException の Message プロパティに実際の文字列の無限のバリエーションがある可能性についての議論は意味がありません。

編集 2: より具体的には、これを試みるべきかどうかについてアドバイスを求めているわけではありません。さまざまなメッセージを取得する方法の手がかりを探しているだけです。ベンの答えは、正しい方向への一歩です。誰か別の方法を知っていますか?

4

2 に答える 2

2

技術的にはそのようなことはありません。XmlException をスローするクラスは、メッセージを任意の文字列に設定できます。実際には、使用しているクラスと、それらが例外を処理する方法によって異なります。メッセージにコンテキスト固有の情報を含むクラスを使用している可能性は十分にあります。たとえば、形式が正しくない xml ノードまたは属性に関する情報です。その場合、処理中の XML によっては、一意のメッセージ文字列の数が無限になる可能性があります。特定のクラスがこのように機能せず、特定の状況下で発生するメッセージの数が限られている可能性も同様にあり得ます。おそらく、より良いアプローチは、コードの特定の部分で try/catch ブロックを使用することです。そこでは、実行中の処理を理解し、何が起こっているかに基づいてより一般的なエラー メッセージを提供します。例えば

編集:

編集に加えて、必要なことを行うのに問題があると思います。基本的に、文字列に含まれている可能性のある特定のキーワードに基づいて、テキスト文字列を別のテキスト文字列に変更しようとしています。これは、面倒で一貫性がない可能性があります。本当にやりたい場合は、Redgate .net Reflector のようなものを使用して loadXML メソッドを反映し、コードを掘り下げて、XML のさまざまな種類の構文エラーを処理する方法と、それに基づいて生成されるメッセージの種類を確認することをお勧めします。どのようなエラーが検出されるか。これはおそらく時間がかかり、困難です。技術的なエラーを隠したいがユーザーに有用な情報を提供したい場合は、エラー メッセージを無視して、ファイル内の問題の場所をユーザーに指摘することをお勧めします。

于 2010-05-07T13:17:45.707 に答える
-1

私の意見ですが...エラーメッセージを調べて、ユーザーに表示する前に変更するのは、本当に見当違いの考えのようです。

まず、国際言語ごとにメッセージが異なります。英語用にそれらを収集できたとしても、費用を支払う意思があるとしても、他の言語の場合は異なります。

第 2 に、単一の言語を扱っている場合でも、外部パッケージが新しい XmlException を LoadXml のスコープに挿入していないことを確認する方法はありません。

最後に、メッセージのリストは安定していません。リリースごとに変更される場合があります。

より良いアイデアは、独自のアプリから適切なメッセージを発行し、必要に応じて、XmlException に含まれる元のエラー メッセージを表示することです。

于 2010-05-07T18:28:27.970 に答える