我使用的Web服务正在返回打包到MIME MultiPart消息中的单个消息(所以我理解它)。 因此,不仅仅是PHP SOAP可以快乐处理的XML,而是我得到了
SoapFault异常:[客户端]看起来我们没有......中的XML文档。
因为XML之前和之后有额外的数据。
这是执行__getLastResponse()
时返回的内容(注意:uuid更改):
--uuid:80805a48-8715-46db-93f0-781f9ba28317+id=786
Content-ID: <http://tempuri.org/0>
Content-Transfer-Encoding: 8bit
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
....
....
</s:Envelope>
--uuid:80805a48-8715-46db-93f0-781f9ba28317+id=786--
因此,我计划扩展SoapClient
并重载__doRequest
,以便我可以操纵响应并删除所有不需要的数据。
class extSoapClient extends SoapClient
{
public function __doRequest($request, $location, $action, $version, $one_way = 0)
{
$response = parent::__doRequest($request, $location, $action, $version, $one_way);
// strip away everything but the xml - <s:Envelope .... </s:Envelope>
return $response;
}
}
我唯一的问题是如何做到这一点。
我确信我可以在preg_replace()
上使用$response
,但我还没有一个最模糊的正则表达式来创造魔法。这绝对不是我的强项。
有人可以帮忙吗?