【问题标题】:How do I read a soap response with simplexml_load_string()如何使用 simplexml_load_string() 读取肥皂响应
【发布时间】:2016-02-10 15:02:07
【问题描述】:

我正在尝试使用 simplexml_load_string() 解析一个肥皂响应。我的肥皂客户端设置为 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看到我的测试页面

【问题讨论】:

  • 如果你使用 PHP 来调用 $response = $client-&gt;doFunction($params); 之类的东西,$response 不是已经是解析了 XML 的对象了吗?

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


【解决方案1】:

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

$xml = "&lt;?xml version='1.0' encoding='UTF-8'?&gt;";

要获取'userid',我想你可以使用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

【讨论】:

    猜你喜欢
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多