我有几个 Soap 输入,并想根据 Payload 中元素的存在来决定我的 Mule Flow 中的行动方案。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xyz="http://xyz.abc.com/">
<soapenv:Header/>
<soapenv:Body>
<xyz:myFirst/>
</soapenv:Body>
</soapenv:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xyz="http://xyz.abc.com/">
<soapenv:Header/>
<soapenv:Body>
<xyz:mySecond>
Something here
</xyz:mySecond>
</soapenv:Body>
</soapenv:Envelope>
在上述有效载荷中,如果存在“myFirst”,我想走一条路线,如果存在“mySecond”,则走另一条路线。
我尝试了以下
<choice>
<when expression="#[xpath('fn:count(//soapenv:Envelope/soapenv:Body/xyz:myFirst/child::text())') != 0]">
//Do something First Here
</when>
<when expression="#[xpath('fn:count(//soapenv:Envelope/soapenv:Body/xyz:mySecond/child::text())') != 0]">
//Do something Second Here
</when>
<otherwise>
//Didn't match any!
</otherwise>
</choice>
但是“myFirst”永远不会被识别,因为它是空的。我尝试了这个位置提到的使用 XPath 来检查 Soap Envelope 是否包含子节点,但无济于事。我当前的尝试是基于如何使用 XPath 判断元素是否存在且非空?.
想法?