XMLPARSE(XMLSS) コンパイラー・オプションが有効である場合には、 UTF-8 でエンコードされた XML 文書を、一部の追加要件が適用される点を除いて、他の XML 文書を構文解析するのと同じように構文解析することができます。
UTF-8 でエンコードされた XML 文書を構文解析するには、次のコードの断片で示すように、XML PARSE ステートメントの ENCODING 句に CCSID 1208 を指定する必要があります。
XML PARSE xml-document
WITH ENCODING 1208
PROCESSING PROCEDURE xml-event-handler
. . .
END-XML
WORKING-STORAGE または LOCAL-STORAGE に、英数字データ項目または英数字グループ項目として、xml-document を定義します。
デフォルトでは、パーサーは、英数字 XML 特殊レジスター XML-TEXT、XML-NAMESPACE、および XML-NAMESPACE-PREFIX で XML 文書フラグメントを返します。 UTF-8 文字 1 文字は、可変個のバイト数でエンコードされます。 英数字データに対するほとんどの COBOL 操作では、1 バイトのエンコード (1 文字が 1 バイトでエンコードされるエンコード) を想定しています。 UTF-8 文字を英数字データとして操作する場合、データが正常に処理されるようにする必要があります。 マルチバイト文字のバイトを分割する可能性がある操作 (参照変更や切り捨てを呼び出す移動操作など) は避けてください。 英数字データのマルチバイト文字を処理するために、INSPECT などのステートメントを信頼して使用することはできません。
UTF-8 文書フラグメントの処理は、XML PARSE ステートメントで RETURNING NATIONAL 句を指定することによって信頼性を高めることができます。 RETURNING NATIONAL 句を使用すると、XML 文書フラグメントは、効率的に UTF-16 エンコードに変換され、 国別特殊レジスター XML-NTEXT、XML-NNAMESPACE、および XMLNNAMESPACE-PREFIX でアプリケーションに返されます。 その後、国別データ項目の XML テキスト・フラグメントを効率的に処理することができます。 (国別データ項目の UTF-16 エンコードによって、COBOL での Unicode 処理が非常に簡素化します。)
次のコードの断片では、UTF-8 XML 文書の構文解析における ENCODING 句と RETURNING NATIONAL 句、両方の使用方法を説明します。
XML PARSE xml-document
WITH ENCODING 1208 RETURNING NATIONAL
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
関連参照XMLPARSE
XML-TEXT および XML-NTEXT
XML-NAMESPACE および XML-NNAMESPACE
XML-NAMESPACE-PREFIX および XML-NNAMESPACE-PREFIX
XML PARSE ステートメント (Enterprise COBOL 言語解説書)