soapUI:当多个结果实体返回且其顺序可能不同时,查找xpath表达式以从响应中捕获特定值

时间:2015-06-24 17:07:45

标签: xpath soapui

我有一个API调用,可能会返回多个结果实体。结果实体的顺序可能会有所不同。如何捕获其“状态”(实体中的另一个字段)为“INPROGRESS”的特定实体的sayID。是否有使用xpath表达式的解决方案? 这是样本回复 -

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
  <bns:queryResponse xmlns:bns="http://api.xyz.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <bns:results numberOfResults="3">
        <bns:result xsi:type="bns:ExecutionRecord">
           <bns:executionId>execution1-5b041417-691b-4f56-b1d4-2b2d35cb5353</bns:executionId>
           <bns:account>account1</bns:account>
           <bns:executionTime>2015-06-24T16:31:25Z</bns:executionTime>
           <bns:status>ERROR</bns:status>
           </bns:result>
        <bns:result xsi:type="bns:ExecutionRecord">
           <bns:executionId>execution2-5b041417-691b-4f56-b1d4-2b2d35cb5353</bns:executionId>
           <bns:account>account1</bns:account>
           <bns:executionTime>2015-06-24T16:31:25Z</bns:executionTime>
           <bns:status>INPROGRESS</bns:status>
           </bns:result>
        </bns:result>
        <bns:result xsi:type="bns:ExecutionRecord">
           <bns:executionId>execution3-5b041417-691b-4f56-b1d4-2b2d35cb5353</bns:executionId>
           <bns:account>account1</bns:account>
           <bns:executionTime>2015-06-24T16:31:25Z</bns:executionTime>
           <bns:status>ERROR</bns:status>
           </bns:result>
        </bns:result>
       </bns:results>
  </bns:queryResponse>
  </S:Body>
</S:Envelope>

1 个答案:

答案 0 :(得分:0)

如上所述,您的XML示例已损坏。但是那里有足够的东西你应该可以使用类似下面的XPath:

//*:status[text()='INPROGRESS']/preceding-sibling::*:executionId/text()

这使用&#34;轴&#34;首先用你的文本找到状态节点,然后找到它的兄弟executionId节点。

或者,这样的事情也应该起作用:

//*:result[*:status[text()='INPROGRESS']]/*:executionId/text()

这只是找到包含您的状态节点的结果节点,并返回该executionId。

有关XPath的其他信息可以是SUM & GROUP BY on an array of composite type