2013-03-15 12 views
5

Używam klasy PHP SoapServer i próbuję umieścić zwykły kod XML w treści odpowiedzi SOAP.Jak wysłać zwykły kod XML w odpowiedzi SOAP?

Przypadek 1:

Moja WSDL został

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

zakodować odpowiedź

return new SoapVar($my_xml,XSD_ANYXML) 

PHP SoapClient mówi

SOAP-ERROR: Encoding: Violation of encoding rules 

Przypadek 2:

WSDL

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

kodowania odpowiedź

return new SoapVar($my_xml,XSD_STRING) 

odpowiedź XML wszystkie < kodowane jako & lt; i> jako & gt;

Przypadek 3:

WDSL

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

gdzie complexType odpowiada struktura XML powrotu

kodowania odpowiedź

return new SoapVar($my_xml,XSD_ANYXML) 

teraz zwrócić typ jest obiekt, nie XML stri ng

Przypadek 4

Podobnie jak w przypadku 3, z kodowaniem jak SOAP_ENC_OBJECT. Znowu wynik będzie obiektem.

Proszę pomóc! Jak mogę uzyskać zwykły tekst XML jako treść odpowiedzi SOAP?

+0

Możesz spróbować rekurencyjnie zastosować 'nową funkcję SoapVar()' na faktycznej strukturze danych zamiast zapisywania kodu XML w ciągu znaków. –

+1

Tak, ale pytanie było, że ** jeśli chcę zapisać XML jako ciąg **, jak mogę to zrobić. – tok

Odpowiedz

4

Czy próbowałeś tego?

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

Istnieją również inne rozwiązania at this PHP page. (Zobacz sekcję "Uwagi składane przez użytkownika")

+0

To zwróci wartość NULL, ponieważ nazwa komunikatu zwrotnego w WSDL nie jest xmlDocument. '$ xmlvar = new SoapVar (''. $ xmlDocument. '', XSD_ANYXML);' doprowadzi do przypadku 1. – tok

Powiązane problemy