2012-06-13 12 views
10

Devo chiamare un servizio Web SOAP utilizzando un oggetto SoapClient. Uno dei parametri deve contenere alcune XML inclusi in una sezione CDATA, in questo modo:Come posso creare un SoapVar contenente CDATA con XML?

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

Nota lo spazio dei nomi del nodo, è la fonte del mio dolore ...

Se creo una stringa SoapVar, l'XML è codificato ...

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> 

Quindi non posso farlo in questo modo. L'unica alternativa che ho trovato è quello di utilizzare la codifica XSD_ANYXML, in questo modo:

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

Funziona, ma è male ... Guarda la scorciatoia hard coded namespace ("ns2").

Quindi avete un'idea per creare una sezione CDATA contenente XML?

risposta

1

Ho avuto lo stesso requisito (servizio Web fornitore maldestrato che richiede l'incorporamento di parte della richiesta come XML codificato in una stringa e che esplode se gli viene assegnata una stringa con codifica di entità anziché CDATA).

Per il meglio della mia capacità di determinare, la soluzione alternativa di SoapVar è buona come si ottiene. Scusate. Sono abbastanza scontento di dover codificare manualmente un riferimento per lo spazio dei nomi.