我无法在php中将SOAP响应转换为数组。
这是密码
$response = $client->__doRequest($xmlRequest,$location,$action,1);
下面是SOAP响应。
<soap:envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:body>
<searchflightavailability33response xmlns="http://FpwebBox.Fareportal.com/Gateway.asmx">
<searchflightavailability33result>
<Fareportal><FpSearch_AirLowFaresRS><CntKey>1777f5a7-7824-46ce-a0f8-33d5e6e96816</CntKey><Currency CurrencyCode="USD"/><OriginDestinationOptions><OutBoundOptions><OutBoundOption segmentid="9W7008V21Feb14"><FlightSegment etc....
</searchflightavailability33result>
</searchflightavailability33response>
</soap:body>
</soap:envelope>;
我使用了以下方法转换为Array,但得到的输出为空。
1.echo '<pre>';print_r($client__getLastResponse());
2.echo '<pre>';print_r($response->envelope->body->searchflightavailability33response);
3.echo '<pre>';print_r($client->SearchFlightAvailability33($response));
4.simplexml_load_string($response,NULL,NULL,"http://schemas.xmlsoap.org/soap/envelope/");
5.echo '<pre>';print_r($client->SearchFlightAvailability33($response));
请给我点建议。
8条答案
按热度按时间fhity93d1#
使用前面方法的组合,可以轻松地将以下SOAP响应结构转换为数组。仅使用函数"simplexml_load_string"删除冒号":",在某些情况下返回null。
xkrw2x1b2#
我找到了一个完美的解决方案来解析数组的SOAP响应:
它将为您提供一个完美的SOAPXML数据数组。
zz2j4svz3#
最后我找到了解决办法
我们可以通过以下方式从SOAP获取响应的主体
实施例1:
实施例2:
ergxz8rk4#
Php解析SOAP对数组的响应
q1qsirdb5#
我用DOMDocument得到了一个值。
flseospp6#
@gtrujillos的第二个答案对我来说很有效,但做了一些修改,因为json字符串需要更多的格式化代码,xPath需要以这种方式“//S:Body”。这是最终解决我的问题的代码。我引用了相同的SOAP响应示例以及获取和返回SOAP响应的代码,我发现它是here:
PHP转换
khbbv19g7#
SOAP可以作为XML来阅读,但是你应该考虑名称空间。这对于PHPs DOM来说并不困难。在你的例子中,SOAP为内部节点使用名称空间,
{http://FpwebBox.Fareportal.com/Gateway.asmx}searchflightavailability33result
元素包含另一个XML文档作为文本内容。r6hnlfcb8#
在我的例子中,我使用了$body = $xml-〉xpath('//soapBody')[0];