2011-12-22 7 views
2

私は以下のコードに似たコードでXML文書を解析しています。コードは、Nodeツリーに解析された後、自分のプログラムの設定として処理されます。いくつかの理由で、この構成にエラーがあり、ユーザーに報告する必要があります。XML文書の場所をユーザーにどのように表現しますか?

私のプログラムは、すべてのエラーが(たとえそのノードがエラーが検出されたポイントであったとしても)単一のノードに帰属できると仮定して動作しています。

この設定を単純にフラットファイル(行単位)から読み取ると、ユーザに報告されるエラーはError at line number 42 ...のようなものになる可能性がありますが、このエラーは抽象的なノードツリーに解析された後にのみ検出される、設定ファイル内のエラーの場所が失われています。

これらの設定ファイルがかなり大きい可能性があることに気づいたユーザに、誤ったノードの場所を表す方法を教えてください。

コードの解析

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = factory.newDocumentBuilder(); 
Document doc = db.parse(inputDocument); 
+0

エラーはXML構造自体にはありませんが、xmlの値はプログラムの入力として無効であることを意味しますか? –

+0

はい。上のコードは成功したと仮定します。そうでない場合は、別の方法で処理されます。 –

+0

XPathを間違った場所に報告しますか?行番号は適切かもしれません。これは、XML自体のフォーマットに依存します。 XMLがまったくフォーマットされていない場合はどうなりますか? – sethu

答えて

0

エラーがXML構造ではありませんが、XMLの値は、あなたのプログラムの入力として無効であるとした場合、それは、ドメイン固有のレポートを作るために、最も理にかなってユーザに提供する。

あなたのユーザーがクレームアジャスターであるとします。あなたが彼に与えるべき次のエラーレポートのどれを選択してください。

  1. "data.xmlの3253行目のデータエラー";
  2. 一部のXPath式。
  3. は、 "無効な決済オファーWRTピーターソンのクレームは、オファーがstatory限界を超えてはならない"

ケース1と2は解読不能です。ケース3は実行可能です。

+2

クーリングでは、このようなグーグル・アップの例を使用できます。http://eyalsch.wordpress.com/2010/11/30/xml-dom-2/ ファイル+行番号(1)*と*(3)の両方を返します。私はそれが一番良いと思う。 –

+0

@owlsteadそれは私が必要とするように見えるようにawnserとしてそれを置くことができます。このコンテキストでは、「ユーザー」はシステム管理者になります。エンドユーザーの入力よりもサーバーサイドのアプリケーション構成について詳しく説明しています。エラーメッセージを意味のあるものにすることは常に挑戦ですが、設定ファイルを参照する必要があります。このエラーは、名前が記載されている不足している属性を報告したい場合があります。したがって、「Peterson Claim」は欠けているものです。 –

関連する問題