Se puede utilizar una sección CData para incluir un documento XML en otro documento XML.
¿Qué es una sección CData?
Un elemento XML puede contener contenido de texto:<element>text content</element>
Sin embargo, algunos caracteres no pueden aparecer en dicho contenido. En especial, '<' y '&' tienen los dos un significado especial para un analizador XML. Si se incluyen en el contenido de texto de un elemento, cambian el significado del documento XML. <element><text><content></element>
<element><text><content></element>
<element><![CDATA[<text><content>]]></element>
¿Para qué sirve una sección CData?
En una sección CData, puede incluir el lenguaje de marcación XML en el valor de un elemento. Pero no se pueden incluir caracteres XML no válidos. Los datos binarios tampoco se pueden incluir en una sección CData.<outer>
<embedXML>
<![CDATA[<innerMsg></innerMsg>]]>
</embedXML>
</outer>
<outer>
<embedXML>
<![CDATA[<badXML></wrongClosingTag>]]>
</embedXML>
</outer>
Los elementos siguientes no son válidos en una sección CData: ¿Cómo añadir una sección CData a un mensaje XML de salida?
Observe el mensaje de entrada siguiente:
<TestCase>
<Folder>
<Field1>Value1</Field1>
<Field2>Value2</Field2>
<Field3>Value3</Field3>
</Folder>
</TestCase>
El ESQL siguiente muestra cómo serializar un mensaje completo: 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;
Este ejemplo serializa la parte InputRoot.XMLNSC.TestCase.Folder del árbol de mensaje.
Si el árbol de mensajes de salida se hubiera examinado antes que un nodo MQOutput, se mostraría:
(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>'
)
)
)
Como puede verse, cada sección CData contiene un solo valor escalar que es la representación de carácter de las porciones del mensaje XML que se requieren.
Este árbol produce el siguiente mensaje XML de salida:
<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>