如何使用simplexml_load_string()读取soap响应

时间:2016-02-10 15:02:08

标签: php xml web-services soap xml-parsing

我正在尝试使用simplexml_load_string()解析soap响应。我的soap客户端设置了trace = 1和exceptions = 0和$ client-> __ getLastResponse()给了我这个结果:

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"   SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<MDHeader>
<userid>inspector@prime.com</userid>
<password>prime123456</password>
<batchid>1234</batchid></MDHeader>
<RECORDSET>
<ROW id='0'>
<INSPECTIONS>
<FOLDER_ID>835410936</FOLDER_ID>
<FOLDER_ID>835221706</FOLDER_ID>
<FOLDER_ID>835222299</FOLDER_ID>
</INSPECTIONS>
</ROW>
</RECORDSET>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

然后我将结果读入$ xml:

$xml = "<?xml version='1.0' encoding='UTF-8'?>";
$xml .= urldecode($client->__getLastResponse());

最后尝试回送一个没有运气的元素:

$xml1 = simplexml_load_string($xml,null,null,'http://schemas.xmlsoap.org/soap/envelope/',true);
echo "ELEMENT:" . $xml1->Envelope->Body->MDHeader->userid;

我相信这是名称空间SOAP-ENV给我的问题,但我不知道如何解决它。

您可以在http://www.primevaluationservices.com/myriad/test.php

看到我的测试页

1 个答案:

答案 0 :(得分:0)

我认为你不需要这一行,因为它已经在xml中了:

$xml = "<?xml version='1.0' encoding='UTF-8'?>";

要获取&#39;用户ID,我认为您可以使用SimpleXMLElement children方法:

$source = <<<SOURCE
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"   SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<MDHeader>
<userid>inspector@prime.com</userid>
<password>prime123456</password>
<batchid>1234</batchid></MDHeader>
<RECORDSET>
<ROW id='0'>
<INSPECTIONS>
<FOLDER_ID>835410936</FOLDER_ID>
<FOLDER_ID>835221706</FOLDER_ID>
<FOLDER_ID>835222299</FOLDER_ID>
</INSPECTIONS>
</ROW>
</RECORDSET>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOURCE;
$xml1 = simplexml_load_string($source);

echo $xml1->children('SOAP-ENV', true)->Body->children('')->MDHeader->userid->__toString();

或SimpleXMLElement xpath方法:

$elements = $xml1->xpath('//SOAP-ENV:Envelope/SOAP-ENV:Body/MDHeader/userid');
$userid = $elements[0]->__toString();
echo '<br>';
echo $userid;

两者都会导致:

  

inspector@prime.com

Demo