Получает доступ к значению тега XMLNSC в ESQL

Мне нужно получить доступ к некоторым значениям XML и объединить их как имя файла для выходного документа. Проблема в том, что решение требует, чтобы сообщение было прочитано в формате BLOB, поэтому сценарий ESQL должен сначала преобразовать большой двоичный объект в CHARACTER / XMLNSC. См. Код ниже. Код ESQL заканчивается ошибкой, когда я запускаю его в потоке сообщений, и получившийся файл называется просто «.xml». Я использую IBM Integration Toolkit 12.

Код

        DECLARE CCSID INT InputRoot.Properties.CodedCharSetId;
        DECLARE encoding INT InputRoot.Properties.Encoding;
        DECLARE bitStream BLOB ASBITSTREAM(InputRoot.BLOB.BLOB, encoding, CCSID);

        CREATE LASTCHILD OF Environment.tempXML DOMAIN('XMLNSC') PARSE(bitStream, encoding, CCSID,'BLOB', 'XMLNSC');

        DECLARE seorno CHARACTER;
        DECLARE sejobn CHARACTER;
        SET seorno = FIELDVALUE(Environment.tempXML.ROOT.(XML.Element)SEORNO);
        SET sejobn = FIELDVALUE(Environment.tempXML.ROOT.(XML.Element)SEJOBN);
        SET OutputLocalEnvironment.Destination.File.Name = seorno || '-' || sejobn || '.xml';

person Jakub Sluka    schedule 24.10.2019    source источник


Ответы (2)


Я только что нашел ответ

CREATE LASTCHILD OF InputRoot DOMAIN('XMLNSC') PARSE(InputRoot.BLOB.BLOB, InputRoot.Properties.Encoding, InputRoot.Properties.CodedCharSetId);

    DECLARE seorno CHARACTER;
    DECLARE sejobn CHARACTER;

    SET seorno = FIELDVALUE(InputRoot.XMLNSC.ROOT.(XMLNSC.Field)SEORNO);
    SET sejobn = FIELDVALUE(InputRoot.XMLNSC.ROOT.(XMLNSC.Field)SEJOBN);
    SET OutputLocalEnvironment.Destination.File.Name = seorno || '-' || sejobn || '.xml';
person Jakub Sluka    schedule 24.10.2019

Вы, вероятно, уже разобрались с этим, но вы не можете использовать константы типа поля, такие как XML.Element, с синтаксическим анализатором XMLNSC. Вы всегда должны использовать константы с префиксом XMLNSC.

В случае, если это поможет, вы можете сделать свой код более компактным, инициализировав переменные как часть оператора DECLARE:

DECLARE seorno CHARACTER FIELDVALUE(InputRoot.XMLNSC.ROOT.(XMLNSC.Field)SEORNO);

person kimbert    schedule 25.10.2019