Как найти / Справочник XML-элемент в неизвестной структуре дерева мыла в ESQL

StackOverflow https://stackoverflow.com//questions/23025924

Вопрос

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

Это было полезно?

Решение

Я не думаю, что есть какой-либо эквивалент синтаксиса XPath '//' в ESQL.Если вам нужно это использовать его для доступа к значению, вы можете использовать узел Javacompute (см. EvauglexPath).Или вы можете написать рекурсивную функцию в ESQL для посещения всех узлов и проверить имена.См. Статью создания функциональной статьи в Infocenter для примера.

Другие советы

Как сказал TJA, вы можете просто использовать анонимные ссылки, такие как это:

InputRoot.SOAP.Body.*[1].sender
.

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

Я использовал следующий код, чтобы получить в значениях 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;
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top