エンコード競合例外を処理する方法は、XMLPARSE コンパイラー・オプションの設定に依存します。
XMLPARSE(XMLSS) の場合
XMLPARSE(XMLSS) コンパイラー・オプションが有効である場合、パーサーはエンコード競合またはその他のタイプの例外のために処理を続行しません。 XML-CODE の値に加えた変更はすべて無視されます。 パーサーが XML PARSE ステートメントに戻る際の XML-CODE の値は、元の例外コードです。
ヒント: エンコード競合例外が発生した場合、z/OS XML System Services 理由コードは通常 XRSN_PARM_ENCODING_SPEC_INVALID です。 ただし、競合が構文解析の開始後に検出された場合、異なる理由コードを取得する場合もあります (正しくない文字を示す理由コードなど)。
XMLPARSE(COMPAT) の場合
XMLPARSE(COMPAT) コンパイラー・オプションが有効である場合、処理プロシージャーは、文書エンコード競合の例外を処理できる可能性があります。 文書項目が英数字であり、XML-CODE の例外コードが 100,001 から 165,535 である例外イベントは、(エンコード宣言で指定された) 文書のコード・ページが、外部コード・ページ情報と矛盾していることを示しています。
この特殊ケースでは、XML-CODE の値から 100,000 を減算した値を文書のコード・ページに指定して、構文解析を行うこともできます。例えば、XML-CODE が 101,140 に設定されている場合、文書のコード・ページは 1140 です。別の方法では、パーサーに戻る前に XML-CODE をゼロに設定して、外部コード・ページを使用して構文解析することもできます。
パーサーは、コード・ページ矛盾の例外イベント用の処理プロシージャーから戻ると、以下の 3 つの処置のいずれかをとります。