CData セクションを使用すると、XML 文書を別の XML 文書内に埋め込むことができます。
CData セクションとは何か
XML エレメントには、次のようにテキスト・コンテンツを含めることができます。<element>text content</element>
ただし、そのコンテンツ中に表示できない文字もあります。 特に「<」および「&」は、XML パーサーにとって特別な意味があります。 エレメントのテキスト・コンテント中にそれらが含まれていると、XML 文書の意味が変わります。 <element><text><content></element>
<element><text><content></element>
<element><![CDATA[<text><content>]]></element>
CData セクションが使用可能な目的
CData セクションには、XML マークアップをエレメントの値として含めることができます。 ただし、有効ではない XML 文字を含めることはできません。 バイナリー・データも、CData セクションに含めることはできません。<outer>
<embedXML>
<![CDATA[<innerMsg></innerMsg>]]>
</embedXML>
</outer>
<outer>
<embedXML>
<![CDATA[<badXML></wrongClosingTag>]]>
</embedXML>
</outer>
以下の項目は CData セクション内では無効です。 CData セクションを出力 XML メッセージに追加する方法
次の入力メッセージをご覧ください。
<TestCase>
<Folder>
<Field1>Value1</Field1>
<Field2>Value2</Field2>
<Field3>Value3</Field3>
</Folder>
</TestCase>
以下の ESQL は、メッセージ全体を直列化する方法を示しています。 DECLARE wholeMsgBlob BLOB
ASBITSTREAM(InputRoot.XMLNSC,
InputRoot.Properties.Encoding,
InputRoot.Properties.CodedCharSetId );
DECLARE wholeMsgChar CHAR
CAST(wholeMsgBlob AS CHAR CCSID InputRoot.Properties.CodedCharSetId);
SET OutputRoot.XMLNSC.Output.(XMLNSC.CDataField)Field1 = wholeMsgChar;
この例では、メッセージ・ツリーの InputRoot.XMLNSC.TestCase.Folder 部分を直列化します。
MQOutput ノードの前の出力メッセージ・ツリーが調べられた場合は、以下のように示されます。
(0x01000010):XML = (
(0x01000000):Output = (
(0x01000000):Field1 = (
(0x02000001): = '<TestCase><Folder><Field1>Value1</Field1><Field2>Value2</Field2>
<Field3>Value3</Field3></Folder><Folder2><Field1>Value1</Field1>
<Field2>Value2</Field2><Field3>Value3</Field3><Folder2></TestCase>'
)
)
)
示されているように、各 CData セクションには、必要な XML メッセージの部分の文字表現である単一のスカラー値が含まれます。
このツリーは、次の XML 出力メッセージを生成します。
<Output>
<Field1><![CDATA[<TestCase><Folder><Field1>Value 1</Field1>
<Field2>Value 2</Field2>
<Field3>Value 3</Field3></Folder>
<Folder2><Field1>Value 1</Field1>
<Field2>Value 2</Field2>
<Field3>Value 3</Field3></Folder2>
</TestCase>]]</Field1>
</Output>