我有一个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>
答案 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。