如何使用XML创建包含CDATA的SoapVar?

时间:2012-06-13 13:32:07

标签: php soap soap-client

我必须使用SoapClient对象调用SOAP Web服务。其中一个参数必须包含CDATA部分中包含的一些XML,如下所示:

<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">&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”)。

那么你有想法创建一个包含XML的CDATA部分吗?

1 个答案:

答案 0 :(得分:1)

我有相同的要求(恶意设计的供应商网络服务需要将部分请求嵌入为字符串中的XML编码,如果您为其提供实体编码的字符串而不是CDATA,则会崩溃。) p>

尽我所能确定,您的SoapVar解决方法就像它一样好。抱歉。我非常不满意自己对命名空间引用进行硬编码。