2012-06-13 22 views
10

Muszę zadzwonić do usługi sieciowej SOAP, używając obiektu SoapClient. Jednym z parametrów musi zawierać niektóre XML zawarte w sekcji CDATA coś takiego:Jak mogę utworzyć SoapVar zawierający CDATA z XML?

<ns2:productInformation><![CDATA[<foo><bar>baz</bar></foo>]]></ns2:productInformation> 

Uwaga przestrzeni nazw węzłów, jest źródłem mojego bólu ...

Jeśli utworzyć ciąg SoapVar, kod XML jest kodowany ...

new SoapVar('<![CDATA[<foo><bar>baz</bar></foo>]]>', XSD_STRING, null, null, 'productInformation', self::MY_NAMESPACE) 

<ns2:productInformation xsi:type="xsd:string">&lt;![CDATA[&lt;foo&t;&lt;bar&gt;baz&lt;/bar&gt;&lt;/foo&gt;]]&gt;</ns2:productInformation> 

Więc nie mogę tego zrobić. Jedyną alternatywą znalazłem jest użycie kodującego XSD_ANYXML, tak:

new SoapVar('<ns2:productInformation><![CDATA[<foo><bar>baz</bar></foo>]]></ns2:productInformation>', XSD_ANYXML) 

To działa, ale to jest złe ... Spójrz na zakodowanego skrótu przestrzeni nazw („ns2”).

Masz pomysł na stworzenie sekcji CDATA zawierającej XML?

Odpowiedz

1

Mam takie same wymagania (źle zaprojektowana usługa internetowa dostawcy, która wymaga osadzenia części żądania w postaci XML zakodowanej w ciągu znaków, i która pojawia się, jeśli podasz mu kodowany przez jednostkę ciąg zamiast CDATA).

Aby jak najlepiej określić, Twoje obejście problemu jest tak dobre, jak to tylko możliwe. Przepraszam. Jestem bardzo niezadowolony z tego, że muszę sam sobie zakodować odniesienia do przestrzeni nazw.