2017-02-22 33 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