Доступ к значению тега XMLNSC в ESQL - PullRequest
1 голос
/ 24 октября 2019

Мне нужно получить доступ к некоторым значениям XML и объединить их в качестве имени файла для выходного документа. Проблема заключается в том, что решение требует, чтобы сообщение было прочитано в формате BLOB, поэтому сценарий ESQL должен сначала преобразовать BLOB-объект в 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';

Ответы [ 2 ]

1 голос
/ 25 октября 2019

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

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

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

1 голос
/ 24 октября 2019

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

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';
...