如何在ESQL中查找/引用未知SOAP树结构中的XML元素

如何在ESQL中查找/引用未知SOAP树结构中的XML元素,soap,messagebroker,ibm-integration-bus,extended-sql,Soap,Messagebroker,Ibm Integration Bus,Extended Sql,我有一条Soap消息,其中包括Soap主体中的各种嵌套节点。我需要找到节点“xyz”,但它并不总是在同一位置。在XSLT世界中,我可以只使用//xyz[1]。esql有等价的语法吗?类似OutputRoot.SOAP.Body{unknown syntax}.xyz[1]我认为ESQL中没有任何与xpath'/'语法等价的东西。如果需要它来访问值,可以使用JavaCompute节点(请参阅EvaluatePath)。或者,您可以在ESQL中编写递归函数来访问所有节点并测试名称。有关示例,请参阅信

我有一条Soap消息,其中包括Soap主体中的各种嵌套节点。我需要找到节点“xyz”,但它并不总是在同一位置。在XSLT世界中,我可以只使用//xyz[1]。esql有等价的语法吗?类似OutputRoot.SOAP.Body{unknown syntax}.xyz[1]

我认为ESQL中没有任何与xpath'/'语法等价的东西。如果需要它来访问值,可以使用JavaCompute节点(请参阅EvaluatePath)。或者,您可以在ESQL中编写递归函数来访问所有节点并测试名称。有关示例,请参阅信息中心中的CREATE FUNCTION文章。

我认为ESQL中没有与xpath“/”语法等价的语法。如果需要它来访问值,可以使用JavaCompute节点(请参阅EvaluatePath)。或者,您可以在ESQL中编写递归函数来访问所有节点并测试名称。有关示例,请参阅信息中心中的“创建函数”一文。

如果它在层次结构上始终处于同一级别,则可以使用匿名引用

我使用以下代码获取XML中的Xyz值

-- 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>

如果它在层次结构上始终处于同一级别,则可以使用匿名引用

我使用以下代码获取XML中的Xyz值

-- 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>

正如TJA所说,您可以简单地使用以下匿名引用:

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

正如TJA所说,您可以简单地使用以下匿名引用:

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