1

ほとんどの XML パーサーは、ドキュメントで最初のエラーが発生した後、あきらめます。実際、IIRC、それは実際にはパーサーの「公式」仕様の一部です。

そのルールを破るものを探しています。特定のスキーマ (有効なスキーマを想定) と xml 入力を受け取り、最初のエラーの後も処理を続行し、エラーごとにイベントを発生させるか、終了時にリストを返すように試行する必要があります。ドキュメントのエラーのレポート。この要件は上から来るものなので、純粋主義者の「しかし、続けるのは意味がない」というコメントを最小限に抑えるようにしましょう。

ドキュメントが整形式であるかどうかと、スキーマに準拠しているかどうかの両方を評価するものを探しています。理想的には、それらを異なるクラスのエラーとして評価します。私は .Net ソリューションを好みますが、スタンドアロンの .exe も使用できます。別のプラットフォームを使用しているものを知っている場合は、他の誰かが役に立つと思うかもしれないので、投稿してください。

アップデート:

私がこれを使用するほとんどのドキュメントは、整形式であると期待しています。データとして & の代わりに & があちこちに含まれているか、タグの配置が間違っている可能性があります。パーサーが何かから回復できるとは思っていません。ただ、最善を尽くして続行するためです。ドキュメントがあまりにも調子が悪い場合は、可能な限り吐き出す必要があり、その後に何らかの「致命的で続行できません」というエラーが発生します。それ以外の場合、スキーマの検証部分は非常に簡単です。

4

3 に答える 3

1

Xercesには、致命的なエラーの後に試行して続行するように設定できる機能があります。

http://apache.org/xml/features/continue-after-fatal-error
True: 致命的なエラーの後、解析を続行しようとします。
False: 最初の致命的なエラーで解析を停止します。
デフォルト: false
注: この機能が true に設定されている場合のパーサーの動作は未定です! したがって、パーサーが無限ループに陥ったり、さらに悪化する可能性があるため、この機能は細心の注意を払って使用してください。

于 2008-08-29T06:13:51.740 に答える
1

TagSoupが必要なようです。これはまさにあなたが望むものではないかもしれませんが、悪いドキュメント処理パーサーに関する限り、これはゴールド スタンダードです。

于 2008-08-28T18:41:48.983 に答える
1

実際、IIRC、それは実際にはパーサーの「公式」仕様の一部です。

公式を引用する必要はありません:)

致命的な誤り

[定義:] 準拠する XML プロセッサが検出してアプリケーションに報告する必要があるエラー。致命的なエラーが発生した後、プロセッサはデータの処理を続行してさらにエラーを検索し、そのようなエラーをアプリケーションに報告する場合があります。エラーの修正をサポートするために、プロセッサはドキュメントからの未処理のデータ (文字データとマークアップが混在する) をアプリケーションで使用できるようにする場合があります。ただし、致命的なエラーが検出されると、プロセッサは通常の処理を続行してはなりません (つまり、文字データとドキュメントの論理構造に関する情報を通常の方法でアプリケーションに渡し続けてはなりません)。

回復オプションでxmllintを使用できます。

于 2008-08-28T17:51:49.260 に答える