2017-02-22 27 views
1

我想生成xml wsdl请求,具有像tem:sessionId参数,但我的PHP代码生成x:sessionId。我不知道如何转换x:tem:SimpleXML文档PHP添加孩子与TEM:标记姓名

结果,我需要:

<?xml version="1.0"?> 
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> 
    <x:Header/> 
    <x:Body> 
     <tem:GetServicesByProvider> 
      <tem:sessionId>890925</tem:sessionId> 
      <tem:ProviderId>29</tem:ProviderId> 
      <tem:mac/> 
     </tem:GetServicesByProvider> 
    </x:Body> 
</x:Envelope> 

这是我的PHP代码

private function createXMLRequest($function, $params) 
{ 
    $xml = new \SimpleXMLElement('<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"><x:Header/></x:Envelope>'); 
    $body = $xml->addChild('Body'); 
    $f = $body->addChild($function, ''); 
    foreach ($params as $param) { 
     $f->addChild($param['tag'], $param['text']); 
    } 

    return $xml; 
} 

,但它会产生这样的:

<?xml version="1.0"?> 
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> 
<x:Header/> 
<x:Body> 
    <x:GetServicesByProvider> 
     <x:sessionId>890925</x:sessionId> 
     <x:ProviderId>29</x:ProviderId> 
     <x:mac/> 
    </x:GetServicesByProvider> 
</x:Body> 
</x:Envelope> 

回答

0

SimpleXML addChild方法(documentation here)有一个thirir d参数,$namespace,它允许你指定的元素应该是一个命名空间。

这种工作方式有点繁琐,因为你必须知道当地前缀空间URI它的定位。

要在你的情况写<tem:sessionID>,你会用

$f->addChild('tem:sessionID', $value, 'http://tempuri.org/'); 

我的建议是把命名空间URI在某种不变,然后在前面加上'tem:'所添加的每个元素:

define('XMLNS_SOAP', 'http://schemas.xmlsoap.org/soap/envelope/'); 
define('XMLNS_TEMP', 'http://tempuri.org/'); 

$xml = new \SimpleXMLElement('<x:Envelope xmlns:x="' . XMLNS_SOAP . '" xmlns:tem="' . XMLNS_TEMP . '"><x:Header/></x:Envelope>'); 

$body = $xml->addChild('Body'); 
$f = $body->addChild($function, ''); 
foreach ($params as $param) { 
    $f->addChild('tem:' . $param['tag'], $param['text'], XMLNS_TEMP); 
} 
+0

当我添加'tem:'到'addChild'方法时,它会自动删除'tem:'。 –

+0

@ 543310你确定你还包含正确的命名空间URL作为第三个参数吗?我在发布之前测试了这段代码,并且它产生了你想要的输出。在这里尝试一下:https://3v4l.org/majj9 – IMSoP