Мне нужно вызвать веб-службу 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"><![CDATA[<foo&t;<bar>baz</bar></foo>]]></ns2:productInformation>
Поэтому я не могу этого сделать. Единственная альтернатива, которую я нашел, - это использовать кодировку XSD_ANYXML
, например:
new SoapVar('<ns2:productInformation><![CDATA[<foo><bar>baz</bar></foo>]]></ns2:productInformation>', XSD_ANYXML)
Это работает, но это плохо... Посмотрите на ярлык жесткого кодированного пространства имен ( "ns2" ).
У вас есть идея создать раздел CDATA, содержащий XML?