我需要使用以下格式发送XML:
(level 1 level 2) [Log Text]
我用soapVar生成了XML主体,但是我无法改变" ns1"标签。 来源:
<soapenv:Body>
<loc:amount>
<loc:user>user_name</loc:user>
<loc:charge>
<description>description_text</description>
</loc:charge>
</loc:amount>
标题结果如下:
$var = '<loc:amount> <loc:user>user_name</loc:user> <loc:charge> <description>description_text</description> </loc:charge> </loc:amount>';
$params[0] = new SoapVar($var,XSD_ANYXML,'amount','http://mydomain.cm');
我需要这个结果:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://mydomain.cm" xmlns:ns2="http://header_domain.cm">
可以更改&#ns; ns1&#39;标记为&#39; loc&#39; ??
由于
答案 0 :(得分:1)
命名空间前缀名称无关紧要;只有通过绑定到命名空间值才能获得它们的含义。没有符合条件的XML处理器会关心特定的名称空间前缀名称;你不应该。
答案 1 :(得分:-1)
我对 UPnP 设备有这样的问题,它使用“u”作为默认命名空间前缀,我需要从 ns1 更改它。由于我也没有找到更好的解决方案,我将在这里发布我的解决方案。
class UpnpSoapClient extends SoapClient {
public function __doRequest($request, $location, $action, $version, $oneWay = 0)
{
// Some fucking UPnP Devices need the fucking u as namespace-prefix ... WTF?
if (preg_match('/xmlns:ns1=/', $request)) {
$request = preg_replace('/xmlns:ns1=/', 'xmlns:u=', $request, 1);
$request = preg_replace('/ns1:/', 'u:', $request);
}
return parent::__doRequest($request, $location, $action, $version);
}
}