| Manipulowanie treścią komunikatu |
W tym miejscu postaram się przedstawić kilka przykładów manipulacji danymi komunikatu.
Wyobraźmy sobie sytuacje, że w wejściowym komunikacie mamy dane CDATA, które będziemy chcieli w przepływie
sparsować za pomocą odpowiedniego parsera, tak aby odczytać to pole nie jako łańcuch tekstowy, ale jako drzewo XML.
Mamy wejściowy XML o poniższej strukturze, gdzie mamy tagi MESSAGE/A, a w nim wartość CDATA zawierający dynamiczną
strukturę XML.
<?xml version="1.0" encoding="UTF-8"?>
<MESSAGE>
<A><![CDATA[<B>beee</B>]]></A>
</MESSAGE>
Poniższy kod ESQL do drzewa Environment dodaje zmienną mycdata zawierającą drzewo CDATA z poniższego przykładu.
...
CREATE LASTCHILD OF Environment NAME mycdata DOMAIN('XMLNS')
PARSE (InputRoot.XMLNS.MESSAGE.A,InputRoot.Properties.Encoding,
InputRoot.Properties.CodedCharSetId);
...
| Określenie częsci wejściowego XML jako wyjściowy XML |
Wyobraźmy sobie wejściowy komunikat XML opakowany poprzez SOAP.
<?xml version="1.0" ?>
<soapenv:Envelope xmlns="http://www.abc.com.pl" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<message>
<data>mydata</data>
</message>
</soapenv:Body>
</soapenv:Envelope>
Poniższy kod powoduje w komunikacie wyjściowym usunięcie zewnętrznych tagów SOAP.
DECLARE cursor REFERENCE TO InputRoot.XMLNS;
DECLARE firstTag CHARACTER;
MOVE cursor FIRSTCHILD TYPE 0x01000000;
MOVE cursor FIRSTCHILD TYPE 0x01000000;
MOVE cursor FIRSTCHILD TYPE 0x01000000;
SET firstTag=FIELDNAME(cursor);
MOVE cursor PARENT;
SET OutputRoot.XMLNS.{firstTag}=cursor;
W rezultacie otrzymamy na wyjściu poniższy komunikat:
<message>
<data>mydata</data>
</message>
Powrót
|