我正在尝试使用PHP SOAP连接到WSDL Web服务。现在我需要从发送的XML中删除SOAP元素。我现在拥有以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://service.com">
<SOAP-ENV:Body>
<ns1:Calculate>
//Content
</ns1:Calculate>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我想要的是以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:Calculate xmlns:ns1="http://service.com">
//Content
</ns1:Calculate>
有没有办法实现这个目标? SOAP是我需要发送此类请求的那个吗?
答案 0 :(得分:0)
SOAP是协议,如果您想要SOAP请求,客户端和服务器端都必须接受并根据此协议发回请求。 只需检查以下设置:
$client = new SoapClient("some.wsdl", array('soap_version' => SOAP_1_2));
服务器可能使用1_2或1_1版本。 您应该与Web服务提供商联系以获取有关Web服务实现的文档。
答案 1 :(得分:0)
使用自定义的SoapClient
覆盖__doRequest
类。新方法从XML中删除名称空间引用,然后调用父级的__doRequest
用修改后的XML满足请求。一个简单但有效的解决方案。
class MySoapClient extends SoapClient
{
public function __doRequest($request, $location, $action, $version, $one_way=0)
{
$xml = str_replace('ns1:', '', $xml);
parent::__doRequest($xml, $location, $action, $version, $one_way);
}
}
# Invoke derived class instead of base class SoapClient
$client = new MySoapClient($wsdl, $options);
答案 2 :(得分:-1)
如果要发出SOAP请求,则需要这些标记。是否真的在你的对面试图提出请求的SOAP服务器?