XML 文書を構文解析するには、XML PARSE ステートメントを使用して、構文解析する XML 文書、構文解析時に発生する XML イベントの処理用プロシージャーを指定します。 また、次のコードの断片で示しているように、ON EXCEPTION 句をコーディングすることによって、構文解析の終了後にアクションを行うようにすることもできます。
XML PARSE xml-document
PROCESSING PROCEDURE xml-event-handler
ON EXCEPTION
DISPLAY 'XML document error ' XML-CODE
STOP RUN
NOT ON EXCEPTION
DISPLAY 'XML document was successfully parsed.'
END-XML
XML PARSE ステートメントで、まず XML 文書文字ストリームを含む構文データ項目 (上の例では xml-document) を識別します。 DATA DIVISION には、文書のエンコードが Unicode UTF-16 である場合には、 国別カテゴリーの基本データ項目または国別グループ項目としてデータ項目を定義します。 それ以外の場合には、英数字グループ項目または基本英数字データ項目としてデータ項目を定義します。 構文解析データ項目が国別の 場合は、XML 文書は、Unicode UTF-16BE、CCSID 1200 で エンコードする必要があります。構文解析データ項目が英数字である場合には、そのコンテンツは、XML 文書のコード化文字セットに関する、 下記の関連参照にリストされている、サポートされているコード・ページのいずれかでエンコードする必要があります。コード・ページの詳細については、XML 文書のエンコードの理解に関する下記の関連参照を参照してください。
次に、文書から検出した XML イベントを処理するプロシージャーの名前を指定します (上の例では XMLEVENT-HANDLER)。
XMLPARSE(XMLSS) コンパイラー・オプションが有効である場合には、 XMLPARSE ステートメントの ENCODING 句を使用して、文書の CCSID を指定することができます。 また、RETURNING NATIONAL 句を使用して、パーサーに UTF-8 または 1 バイト文字を国別文字に自動変換させて、処理プロシージャーに返すこともできます。
さらに、構文解析の終了時に制御を受け取る以下の句のいずれかまたは両方を指定できます。
XML PARSE ステートメントを終了するには、明示範囲終了符号の END-XML を使用します。END-XML を使用して、条件ステートメント内で ON EXCEPTION 句または NOT ON EXCEPTION 句を使用する XML PARSE ステートメントをネストできます。
パーサーは、XML イベントごとに処理プロシージャーに制御を渡します。 処理プロシージャーの終わりに到達すると、制御はパーサーに返されます。XML パーサーと処理プロシージャー間での制御の受け渡しは、以下のイベントのいずれかが発生するまで継続します。
特殊レジスター: XML-EVENT 特殊レジスターを使用して、パーサーが処理プロシージャーに渡したイベントを判別します。XML-EVENT には、'START-OF-ELEMENT' などのイベント名が入ります。パーサーは、特殊レジスター XML-TEXT または XML-NTEXT に入っているイベントの内容を渡します。また、XMLPARSE(XMLSS) オプションが有効である場合には、パーサーは特殊レジスター XML-NAMESPACE または XML-NNAMESPACE を XML イベントに関連した名前空間 ID に設定します (存在する場合)。 パーサーは XML-NAMESPACE-PREFIX または XML-NNAMESPACE-PREFIX 特殊レジスターを関連接頭部に設定します。
関連概念
XML-CODE
関連参照
XML 文書のコード化文字セット
XML-EVENT
XMLPARSE
XML PARSE ステートメント (Enterprise COBOL 言語解説書)