SOAP - PHP可以更改&#ns; ns1'标签名称?

时间:2016-09-13 13:52:23

标签: php xml soap

我需要使用以下格式发送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; ??

由于

2 个答案:

答案 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);
}

}