我需要来自此SOAP响应的值。该值位于loginresponse / return元素中。以下是回复:
<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/">
<soap-env:body soap-env:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:DBCentralIntf-IDBCentral">
<ns1:loginresponse>
<return xsi:type="xsd:string"><**THIS IS THE VALUE I NEED**></return>
</ns1:loginresponse>
</soap-env:body>
以下是我试图解析的方式:
$response = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($response, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");
$ns = $xml->getNamespaces(true);
$soap = $xml->children($ns['SOAP-ENV']);
$res = $soap->Body->children($ns['NS1']);
print_r($res->LoginResponse->Return);
但我得到一个空物体。
感谢您的帮助!
答案 0 :(得分:3)
请考虑使用PHP SOAP客户端,而不是使用cURL并尝试解析XML响应。 You may need to install PHP SOAP or enable it in your PHP configuration.(我在Windows上使用PHP,所以我只需要在php.ini中取消注释extension=php_soap.dll
。)
如果安装了SOAP,则可以从您正在使用的Web服务的提供程序获取WSDL。基于在您显示的XML中使用Google搜索这个值:xmlns:ns1="urn:DBCentralIntf-IDBCentral"
,我猜你可以找到它here,但你可能会找到更好的运气,因为你肯定知道你是什么网络服务'正在使用。
获得WSDL后,使用PHP SOAP客户端非常简单:
$client = new SoapClient('path/to/your.wsdl');
$response = $client->Login(['username', 'password']);
$theValueYouNeed = $response->loginresponse->return;
答案 1 :(得分:0)
更新: 删除命名空间可以清除一些东西(尽管是黑客)。这是我的新代码:
$response = curl_exec($ch);
curl_close($ch);
$cleanxml = str_ireplace(['SOAP-ENV:', 'SOAP:'], '', $response);
$cleanxml = str_ireplace('NS1:','', $cleanxml);
$xml = simplexml_load_string($cleanxml);
echo $xml->Body->LoginResponse->return[0];