Mithilfe eines CData-Bereichs kann ein XML-Dokument in ein anderes XML-Dokument eingebettet werden.
Was ist ein CData-Bereich?
Ein XML-Element kann Textinhalt enthalten:<element>Der Text</element>
Es gibt jedoch einige Zeichen, die in diesem Inhalt nicht verwendet werden dürfen. Dazu gehören insbesondere '<' und '&', da beide ein bestimmte Bedeutung für einen XML-Parser haben. Sind sie im Textinhalt eines Elements enthalten, ändert sich damit die Bedeutung des XML-Dokuments. <element><Der><Text></element>
<element><Der><Text></element>
<element><![CDATA[<Der><Text>]]></element>
Wofür kann ein CData-Bereich verwendet werden?
In einem CData-Bereich können Sie XML-Markup in den Wert eines Elements einfügen. Für XML ungültige Zeichen können allerdings nicht verwendet werden. Auch Binärdaten dürfen nicht in einem CData-Bereich enthalten sein.<outer>
<embedXML>
<![CDATA[<innerMsg></innerMsg>]]>
</embedXML>
</outer>
<outer>
<embedXML>
<![CDATA[<badXML></wrongClosingTag>]]>
</embedXML>
</outer>
Folgende Zeichen dürfen nicht in einem CData-Bereich verwendet werden: Wie wird ein CData-Bereich zu einer XML-Ausgabenachricht hinzugefügt?
Sehen Sie sich folgende Eingabenachricht an:
<TestCase>
<Folder>
<Field1>Value1</Field1>
<Field2>Value2</Field2>
<Field3>Value3</Field3>
</Folder>
</TestCase>
Im folgenden ESQL-Code wird gezeigt, wie eine vollständige
Nachricht serialisiert wird: 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;
In diesem Beispiel wird der Abschnitt 'InputRoot.XMLNSC.TestCase.Folder' der Nachrichtenbaumstruktur serialisiert.
Wenn die Baumstruktur der Ausgabenachricht vor einem MQOutput-Knoten ausgewertet würde, würde Folgendes angezeigt:
(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>'
)
)
)
Das Beispiel zeigt, dass jeder CData-Bereich einen einzelnen skalaren Wert enthält, bei dem es sich um die Zeichendarstellung des erforderlichen Abschnitts der XML-Nachricht handelt.
Aus dieser Baumstruktur wird folgende XML-Ausgabenachricht erzeugt:
<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>