Как найти / указать элемент XML в неизвестной древовидной структуре SOAP в ESQL

У меня есть сообщение Soap, которое включает в себя различные вложенные узлы в теле Soap. Мне нужно найти узел xyz, но он не всегда находится в одном месте. В мире XSLT я мог бы просто использовать // xyz [1]. Есть ли эквивалентный синтаксис для esql? Что-то вроде OutputRoot.SOAP.Body {неизвестный синтаксис} .xyz [1]


person johkar    schedule 12.04.2014    source источник


Ответы (3)


Я не думаю, что есть какой-либо эквивалент синтаксиса xpath '//' в ESQL. Если вам нужно использовать его для доступа к значению, вы можете использовать узел JavaCompute (см. AssessmentXpath). Или вы можете написать рекурсивную функцию на ESQL, чтобы посещать все узлы и проверять имена. См. Пример в статье CREATE FUNCTION в Инфоцентре.

person Manoj    schedule 17.04.2014

Как сказал TJA, вы можете просто использовать анонимные ссылки следующим образом:

InputRoot.SOAP.Body.*[1].sender
person Community    schedule 11.10.2016

Если он всегда находится на одном и том же уровне иерархии, вы можете использовать анонимные ссылки.

Я использовал следующий код, чтобы получить значения Xyz в XML.

-- Walk all the second level aggregates looking for any that contain the Xyz tag
DECLARE AnonRef REFERENCE TO InputRoot.XMLNSC.*:HasAggregatesWithXyz.*:*[1];
WHILE(LASTMOVE(AnonRef)) DO
    DECLARE XyzRef REFERENCE TO AnonRef.*:Xyz[1];
    IF(LASTMOVE(XyzRef)) THEN
        -- Do something with the value of Xyz
        DECLARE CharVal CHAR FIELDVALUE(XyzRef);
    END IF;

    MOVE AnonRef NEXTSIBLING;
END WHILE;

<HasAggregatesWithXyz>
    <Agg1><NotXyz>NotNot</NotXyz></Agg1>
    <Agg2><Xyz>XyzValue1</Xyz></Agg2>
    <Agg3><NotXyz>NotNot</NotXyz></Agg3>
    <Agg4><Xyz>XyzValue2</Xyz></Agg4>
</HasAggregatesWithXyz>

Примечание. В зависимости от выбранных вами параметров синтаксического анализа XMLNSC, в частности, от того, что связано с сохранением пробелов, вы можете сделать ссылку более конкретной. Для этого вы можете использовать следующие типы.

DECLARE AnonRef REFERENCE TO InputRoot.XMLNSC.*:HasAggregatesWithXyz.(XMLNSC.Folder)*:*[1];
....
MOVE AnonRef NEXTSIBLING REPEAT TYPE;
person TJA    schedule 02.05.2014