ほとんどの例外の場合、XML テキストには、文書の、 例外が検出されたポイントまで (そのポイントを含む) の構文解析済み 部分が入ります。構文解析の開始前にシグナル通知される、エンコード方式の競合に関する 例外の場合は、XML テキストの長さはゼロか、または文書からのエンコード宣言値 だけが XML テキストに入ります。 前述の例では、例外イベントを引き起こす項目が 1 つあります。 "sandwich" エレメント終了タグの後ろにある余分な "junk" が その項目です。
例外には次の 2 種類があります。
非ゼロの戻りコードを出した例外イベント関数から戻ると、 通常パーサーは文書の処理を停止し、PLISAXA または PLISAXB 組み込み サブルーチンを呼び出したプログラムに制御を戻します。
継続可能な例外の場合は、ゼロの戻りコードを指定して例外イベント関数から 戻ることにより、パーサーに文書の処理継続を要求します。 ただし、その後でさらに例外が発生する場合もあります。 継続を要求したときにパーサーがとる処置の詳細については、 セクション 2.5.6.1、「継続可能な例外」を参照してください。
範囲 100,001 から 165,535 まで、および 200,001 から 265,535 までの例外番号の例外 については、特殊なケースが適用されます。 これらの範囲の例外コードは、文書の CCSID (エンコード宣言など、文書の先頭 を検査することによって決定される) が、PLISAXA または PLISAXB 組み込み サブルーチンによって指定 (明示的または暗黙的に) された CCSID 値と 同一でないことを示しています。このことは、両方の CCSID が同じ 基本エンコード (EBCDIC または ASCII) を示すものであっても起こります。
これらの例外の場合、例外イベントに渡される例外コードは、 EBCDIC CCSID の場合は文書の CCSID に 100,000 を加算した値、 ASCII CCSID の場合は 200,000 を加算した値になります。 例えば、例外コードが 101,140 の場合、文書の CCSID は 01140 です。 PLISAXA または PLISAXB 組み込みサブルーチンによって提供される CCSID 値 は、呼び出しの最後の引数として明示的に設定されるか、 また最後の引数が省略された場合は、CODEPAGE コンパイラー・オプション の値を使用して暗黙設定されます。
このような CCSID の矛盾によって起こった例外に対する例外イベント関数から 戻った後、戻りコードの値に応じて、パーサーは次の 3 つのうちいずれかの 処置を実行します。