如何在ESQL中查找/引用未知SOAP树结构中的XML元素
我有一条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值如何在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中编写递归函数来访问所有节点并测试名称。有关示例,请参阅信
-- 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