Как я могу создать SoapVar, содержащий CDATA с XML?

Мне нужно вызвать веб-службу SOAP с использованием объекта SoapClient. Один из параметров должен содержать некоторый XML, включенный в раздел CDATA, например:

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

Обратите внимание на пространство имен node, это источник моей боли...

Если я создаю строку SoapVar, XML кодируется...

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>

Поэтому я не могу этого сделать. Единственная альтернатива, которую я нашел, - это использовать кодировку XSD_ANYXML, например:

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

Это работает, но это плохо... Посмотрите на ярлык жесткого кодированного пространства имен ( "ns2" ).

У вас есть идея создать раздел CDATA, содержащий XML?

Ответ 1

У меня было такое же требование (maldesigned vendor web service, который требует вложения части запроса как XML, закодированного в строку, и который взрывается, если вы передаете ему строку с кодировкой сущности вместо CDATA).

В меру моей способности определить, обходное решение SoapVar так же хорошо, как и получается. Сожалею. Я довольно недоволен тем, что мне пришлось жестко задавать ссылку на пространство имен.