【问题标题】:How to find/reference XML element in unknown SOAP tree structure in ESQL如何在 ESQL 中的未知 SOAP 树结构中查找/引用 XML 元素
【发布时间】:2014-05-26 09:30:20
【问题描述】:

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

【问题讨论】:

    标签: soap messagebroker ibm-integration-bus extended-sql


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      我使用以下代码获取 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>
      

      注意:根据您选择的 XMLNSC 解析选项,特别是与保留空白有关的任何事情,您可能希望使您的参考更加具体。为此,您可以使用如下类型。

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-03
          • 1970-01-01
          • 2014-09-01
          • 1970-01-01
          相关资源
          最近更新 更多