2013-03-15 22 views
5

我正在使用PHP SoapServer類,並嘗試將純XML內部的SOAP響應正文。如何在SOAP響應中發送純XML?

案例1:

我WSDL已經

<element name="getDataResponse" type="xsd:string"/> 

我編碼響應

return new SoapVar($my_xml,XSD_ANYXML) 

PHP SoapClient的說

SOAP-ERROR: Encoding: Violation of encoding rules 

情況2:

WSDL

<element name="getDataResponse" type="xsd:string"/> 

響應編碼

return new SoapVar($my_xml,XSD_STRING) 

響應XML已經所有<編碼爲& LT;和>爲& gt;

情況3:

WDSL

<element name="getDataResponse"> 
    <complexType> 
    ... 
    </complexType> 
</element> 

其中的complexType對應XML的結構返回

響應編碼

return new SoapVar($my_xml,XSD_ANYXML) 

現在返回類型是一個對象,不是XML stri納克

案例4

相同殼體3除了編碼作爲SOAP_ENC_OBJECT。再次的結果將是對象。

請幫忙!我如何才能獲得純粹的XML文本作爲SOAP響應的主體?

+0

您可以嘗試在實際數據結構上遞歸應用新的SoapVar(),而不是將XML寫入字符串。 – 2013-03-15 10:29:30

+1

是的,但問題是,如果我想將XML寫成字符串**,我該怎麼做。 – tok 2013-03-15 11:13:39

回答

4

你試過這個嗎?

return new SoapVar(
    '<ns1:xmlDocument>'.$my_xml.'</ns1:xmlDocument>', 
    XSD_ANYXML 
); 

還有其他解決方案以及at this PHP page。 (請參閱'用戶注意事項'部分)

+0

這將返回NULL,因爲WSDL中的返回消息的名稱不是xmlDocument。 '$ xmlvar = new SoapVar(''。$ xmlDocument。'',XSD_ANYXML);'將導致情況1。 – tok 2013-03-15 11:07:58