Здравтствуйте, у меня SOAP запрос получает в общем виде вот такой ответ: Код (Text): <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <rpt:loadReportFileResponseElem xmlns:q="http://bus.rbi.com/common/query/v1" xmlns:a="http://bus.rbi.com/common/about/v1" xmlns:bs="http://bus.rbi.com/common/basis/v1" xmlns:s="http://bus.rbi.com/common/support/v1" xmlns:rpt="http://bus.rbi.com/service/reports/v1"> <s:code>какая-то инфа</s:code> <s:responseTime>какая-то инфа</s:responseTime> <s:responseDbTime>какая-то инфа</s:responseDbTime> <s:requestId>какая-то инфа</s:requestId> <s:route>какая-то инфа</s:route> <rpt:result> <rpt:file>какая-то инфа</rpt:file> </rpt:result> </rpt:loadReportFileResponseElem> </soap:Body> </soap:Envelope> Как мне вытащить из этого ответа только Код (Text): <rpt:file>какая-то инфа</rpt:file> и затем присвоить переменной? Например так я получаю весь ответ: PHP: $client = new SoapClient( "http://localhost:8181/cxf/reports/v1?wsdl",array('trace' => 1) ); echo "Ответ:\n" . $client->__getLastResponse() . "\n"; И как мне из этого ответа получить только <rpt:file>какая-то инфа</rpt:file> Очень нужна помощь. Т.е. другими словами как мне SOAP ответ преобразовать в массив. А дальше из этого массива я буду тащить только нужные мне данные?
На случай, если сервис предоставляет wsdl (что видно из кода), для обращения к методам используйте __soapCall() И ничего выгрызать из ответа не придётся.
@Sail спасибо. Теперь я использую __soapCall() и получаю следующее: Код (Text): object(stdClass)#3 (6) { ["code"]=> int(0) ["responseTime"]=> int(3315) ["responseDbTime"]=> int(2780) ["requestId"]=> string(36) "8196b8e6-40d9-426b-ac0f-4b8e325b3113" ["route"]=> string(18) "rbi@localhost:8181" ["result"]=> object(stdClass)#4 (1) { ["file"]=> string(45428) "JVBERi0xLjQKJeLjz9MKNSAwIG9iago8PC9GaWx0ZXI…"}} Код php PHP: $client = new SoapClient( "http://localhost:8181/cxf/reports/v1?wsdl",array('trace' => 1) ); $fileEncoding="utf-8"; $format = "pdf"; $reportCode = "RPT_DEMAND_REQ"; $reportParams=$_GET['pid']; $base64Encode=true; $params = array( "fileEncoding" => $fileEncoding, "format" => $format, "reportCode" => $reportCode, "reportParams"=>$reportParams, "base64Encode"=>$base64Encode ); $response = $client->__soapCall("loadReportFile", array($params)); var_dump($response); И как мне теперь получить то что я хотел в первом посте?
@Sail теперь мой код выглядит так PHP: $client = new SoapClient( "http://localhost:8181/cxf/reports/v1?wsdl",array('trace' => 1) ); $fileEncoding="utf-8"; $format = "pdf"; $reportCode = "RPT_DEMAND_REQ"; $reportParams=$_GET['pid']; $base64Encode=true; $params = array( "fileEncoding" => $fileEncoding, "format" => $format, "reportCode" => $reportCode, "reportParams"=>$reportParams, "base64Encode"=>$base64Encode ); $response = $client->__soapCall("loadReportFile", array($params)); print_r($responce->result->file); однако теперь на странице ничего не отображается
Если var_dump, а не print_r? И последовательно... сначала $responce->result, затем: $responce->result->file?