2013-08-19 120 views
0

我有一個複雜的XML需要通過SoapClient發送。SoapClient:將NS添加到XML節點

我想通過發送帶請求的params數組來做到「正確」的方式。

這裏是我當前數組的一個例子:

$params = array("TestRequest" => array("NodeOne" => "Value1", "NodeTwo" => "Value2")); 

它使一個這樣的XML:

<TestRequest> 
    <NodeOne>Value1</NodeOne> 
    <NodeTwo>Value2</NodeTwo> 
</TestRequest> 

不過,我需要的NS添加到 「TestRequest」 的一部分。它需要像這樣:

<ord:TestRequest> 
    <NodeOne>Value1</NodeOne> 
    <NodeTwo>Value2</NodeTwo> 
</ord:TestRequest> 

我已經把我的頭髮亂投醫我能想到,谷歌搜索和堆棧無濟於事。是的,我已經嘗試了數組鍵入,「ord:TestRequest」。

如果任何人都是PHP中的SoapClient大師,並且可以提供幫助,我將永遠感激。

回答

0

好吧,經過很多頭痛之後...完成這個最簡單的方法並不是我更喜歡的方式。

我結束了手動編寫像這樣的XML:

$xml = '<ord:TestRequest> 
    <NodeOne>Value1</NodeOne> 
    <NodeTwo>Value2</NodeTwo> 
</ord:TestRequest>'; 

PHP:

$dom =new DOMDocument('1.0'); 
try { 
    $dom->loadXML($xml); 
    $request = $dom->saveXML(); 
    $this->xml = $request; 
    return true; 
} catch (DOMException $e) { 
    $this->xml = $xml; 
    $this->errors++; 
    $this->error_msg = 'Error generating XML :' . $e; 
     } 

我的XML是結構化的,就像它應該做在SOAPRequest,然後我用了SoapClient的__doRequest( ) 方法。

重要的是,當你走這條路線時,你不能使用你的wsdl自動生成xml,因爲你已經做到了,所以確保在你的soap連接中並且請求你的wsdl爲null。

+0

重要注意事項:我遺漏了完整的xml,如果您使用此參考來解決同一問題,請訪問php.net上的SoapClient :: __ doRequest()以瞭解如何構建整個類 –