Мне нужно вызвать веб-службу SOAP с помощью объекта SoapClient. Один из параметров должен содержать некоторый XML, включенный в раздел CDATA, например:
<ns2:productInformation><![CDATA[<foo><bar>baz</bar></foo>]]></ns2:productInformation>
Обратите внимание на пространство имен узла, это источник моей боли...
Если я создам строку 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?