XMLNSC パーサーはコンパクト・パーサーなので、単一の内容のエレメントは単一の構文エレメントとして構文解析されます。 エレメントに子エレメントと何らかのテキストの両方がある場合、そのテキストは「混合内容」と呼ばれます。
<simpleElement>simpleValue</simpleElement>
SET val = FIELDVALUE(InputRoot.XMLNSC.(XMLNSC.Field)simpleElement);
出力中に単純内容を持つエレメントを生成するには、次のようにします。 SET OutputRoot.XMLNSC.(PCDataField)simpleElement VALUE = 'simpleValue';
メッセージ・ツリーを照会する際に XMLNSC.Field を使用したものの、出力メッセージを構成する際には XMLNSC.PCDataField を指定していることに注意してください。 メッセージ・ツリーを照会する際に XMLNSC.PCDataField を使用することもできましたが、次の例に示すように、入力メッセージが CData セクションを使用していると、それは機能しません。 <simpleElement><![CDATA[simpleValue]]></simpleElement>
<element>mixed1<child>simpleValue</child>mixed2</element>
デフォルトでは混合内容は廃棄されます。通常これはフォーマット設定用の空白に過ぎず、ビジネス上の意味を持たないためです。 ノード・プロパティーの「パーサー・オプション」ページ上で「混合内容の保存」チェック・ボックスを選択すれば、混合内容を保存することができます。混合内容が保存される場合、XMLNSC パーサーは混合内容の個別の項目ごとに、「値」子エレメントを作成します。
SET mixed1 = FIELDVALUE(InputRoot.XMLNSC.(element).*[1];
上の XML フラグメントを構成する ESQL は、以下のとおりです。 CREATE ref REFERENCE TO OutputRoot.XMLNSC.element;
CREATE FIRSTCHILD OF ref TYPE XMLNSC.PCDataValue VALUE 'mixed1';
CREATE LASTCHILD OF ref NAME 'child' TYPE XMLNSC.PCDataField VALUE 'simpleValue';
CREATE LASTSTCHILD OF ref TYPE XMLNSC.PCDataValue VALUE 'mixed2';
以下の ESQL により、「混合内容の保存」 オプションは使用可能になります。
DECLARE X BLOB;
-- assume that X contains an XML document
CREATE LASTCHILD OF OutputRoot
PARSE(X OPTIONS XMLNSC.MixedContentRetainAll);
CData セクションは、エレメントの内容に XML マークアップ文字を含めることができる XML 表記です。
<simpleElement>simpleValue</simpleElement>
<simpleElement><![CDATA[simpleValue]]></simpleElement>
CData セクションが唯一のテキスト内容である場合、XMLNSC パーサーはフィールド・タイプを XMLNSC.PCDataField の代わりに XMLNSC.CDataField に設定することによって、入力文書が CData セクションを含んでいたことを記憶します。 CData セクションが唯一のテキスト内容ではない場合、それは子の値エレメントとして、残りのテキスト内容を表す他の子の値エレメントと共に作成されます。 以下は、この一例です。
<simpleElement><![CDATA[CDataValue]]>normalText</simpleElement>
XML 文書中での正しい CData の使用法の詳細については、XMLNSC: CData の処理を参照してください。