2013-03-15 31 views
5

Tôi đang sử dụng lớp SoapServer PHP và cố gắng để đặt XML đơn giản bên trong phần thân của phản hồi SOAP.Làm thế nào để gửi XML đơn giản trong phản hồi SOAP?

Trường hợp 1:

WSDL của tôi đã

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

tôi mã hóa các phản ứng

return new SoapVar($my_xml,XSD_ANYXML) 

PHP SoapClient nói

SOAP-ERROR: Encoding: Violation of encoding rules 

Trường hợp 2:

WSDL

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

mã hóa đáp ứng

return new SoapVar($my_xml,XSD_STRING) 

phản ứng XML có tất cả < mã hóa như & lt; và> như & gt;

Trường hợp 3:

WDSL

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

nơi complexType tương ứng với cấu trúc của XML để trở

mã hóa đáp ứng

return new SoapVar($my_xml,XSD_ANYXML) 

tại kiểu trả về là một đối tượng, không phải là dấu gạch ngang XML ng

Trường hợp 4

tương tự như trường hợp 3 ngoại trừ mã hóa như SOAP_ENC_OBJECT. Một lần nữa kết quả sẽ là đối tượng.

Vui lòng trợ giúp! Làm thế nào tôi có thể nhận được văn bản XML đơn giản như là nội dung của phản hồi SOAP?

+0

Bạn có thể thử đệ quy 'SoapVar() mới' trên cấu trúc dữ liệu thực tế của bạn thay vì viết XML trong một chuỗi. –

+1

Có, nhưng câu hỏi là ** nếu tôi muốn viết XML dưới dạng chuỗi **, tôi có thể làm như thế nào. – tok

Trả lời

4

Bạn đã thử cái này chưa?

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

Có các giải pháp khác cũng như at this PHP page. (Xem phần 'Ghi chú Gán Người dùng')

+0

Điều này sẽ trả về NULL vì tên của thư trả về trong WSDL không phải là xmlDocument. '$ xmlvar = new SoapVar (''. $ xmlDocument. '', XSD_ANYXML);' sẽ dẫn đến trường hợp 1. – tok